#include <stdio.h>
#include <string.h>
int main()
{
char arrDst[5] = {0};
char arrSrc[10] = "123456";
memcpy(arrDst, arrSrc, sizeof(arrSrc));
return 0;
}
यहां इस कार्यक्रम में यह स्पष्ट है कि स्मृति मेमोरी है।क्या जीसीसी कंपाइलर के पास संकलन समय पर स्मृति भ्रष्टाचार को पहचानने का कोई विकल्प है?
क्या जीसीसी कंपाइलर में कोई विकल्प है जिसके द्वारा मैं संकलन समय पर इस समस्या को पहचान सकता हूं?
नोट: मैंने valgrind --leak-check=full
का उपयोग किया, लेकिन इससे मदद नहीं मिलती है।
यह एक स्मृति रिसाव नहीं है: इस मामले में पूर्व शर्त है कि विफल रहता सूची में पहले, लिखने के लिए गंतव्य की वैधता के बारे में है। Valgrind केवल तभी मिल सकता है जब आप 'malloc() ' –
के साथ बफर आवंटित करते हैं, आपको ऐसा क्यों लगता है कि स्मृति भ्रष्टाचार स्पष्ट है? कंपाइलर memcpy के अर्थशास्त्र के लिए कोई धारणा नहीं कर सकता है। – swegi
@ स्वेगी: कंपाइलर जानता है कि 'memcpy' के अर्थशास्त्र क्या हैं; वह नाम सी मानक द्वारा कार्यान्वयन के लिए आरक्षित है, इसलिए यदि आप अपना खुद का 'memcpy' फ़ंक्शन लिखते हैं जो कुछ अलग करता है, तो संकलक को इसे अवहेलना करने की अनुमति है और मान लीजिए कि आप '' फ़ंक्शन को कॉल कर रहे हैं। –