मैं सोच रहा था मेरी धारणा है कि पहले मैं स्मृति में 12 वर्ण लेकिन में काम के लिए जगह आवंटित था अगली पंक्ति स्टैक पर एक चार सरणी बनाती है और इसका मेमोरी पता परीक्षण करने के लिए पास किया जाता है। तो मुफ्त() ढेर पर जगह जारी करने की कोशिश करता है जिसकी अनुमति नहीं है। क्या वो सही है?स्मृति का आवंटन और क्यों निम्नलिखित कोड isnt't</p> <pre><code>int main(int argc, char **argv) { char *test = (char*) malloc(12*sizeof(char)); test = "testingonly"; free(test); } </code></pre> <p>काम कर इस बारे में सोच करने के बाद सी में स्ट्रिंग को बचाने
तो ढेर पर एक स्ट्रिंग को बचाने के लिए सही दृष्टिकोण क्या होगा? क्या निम्नलिखित एक आम तरीका है?
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
strcpy(test, "testingonly");
free(test);
}
पहला समाधान एक क्लासिक स्मृति रिसाव को दिखाता है; आपको कुछ आवंटित मेमोरी के लिए पॉइंटर मिलता है, फिर जब आप 'test' के लिए स्ट्रिंग अक्षर को पॉइंटर असाइन करते हैं तो इसका एकमात्र संदर्भ खो देते हैं। इसके बाद, आवंटित स्मृति - एक रिसाव का संदर्भ देने के लिए आपके लिए कोई वैध तरीका नहीं है। –
कभी भी सी में मॉलोक के नतीजे टाइप न करें, यह व्यर्थ है और केवल बग और कंपाइलर चेतावनियों को छुपाता है। – Lundin
हां - 'strcpy' या' strncpy' या 'memcpy' का उपयोग करें। strncpy strcpy से बेहतर है, क्योंकि यह अधिकतम एन वर्णों पर प्रतिलिपि करते समय बफर ओवररन समस्या से बचने में मदद करता है। –