2012-04-26 20 views
11

के साथ सेगमेंटेशन गलती मैं सोच रहा हूं कि मुझे नीचे दिए गए कोड में सेगमेंटेशन गलती क्यों मिल रही है।स्ट्रैपी

int main(void) 
{ 
     char str[100]="My name is Vutukuri"; 
     char *str_old,*str_new; 

     str_old=str; 
     strcpy(str_new,str_old); 

     puts(str_new); 

     return 0; 
} 

उत्तर

21

आपने *str_new प्रारंभ नहीं किया है, इसलिए यह कुछ यादृच्छिक पते पर str_old की प्रतिलिपि बना रहा है। आप या तो यह करने के लिए की जरूरत है: यदि आपने ऐसा नहीं किया जब malloc समारोह का उपयोग कर

char str_new[100]; 

या

char * str = (char *) malloc(100); 

आप #include <stdlib.h> करना होगा।

7

str_new एक गैर-आरंभिकृत सूचक है, तो आप एक (अर्ध) यादृच्छिक पते पर लिखने की कोशिश कर रहे हैं।

2

क्योंकि str_new मान्य स्मृति को इंगित नहीं करता है - यह अनियंत्रित है, इसमें कचरा होता है, और संभावित रूप से स्मृति में अंक होता है जो आपको विभाजित त्रुटि प्राप्त करने पर भी मैप नहीं किया जाता है। आपको str_new पर कॉल करने से पहले \0 बाइट समेत ब्याज की स्ट्रिंग को पकड़ने के लिए पर्याप्त मेमोरी के वैध ब्लॉक पर इंगित करना होगा।