2012-04-26 4 views
11

以下のコードでセグメント化エラーが発生するのはなぜですか?strcpyを使ったセグメント化エラー

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は、strcpy()を呼び出す前に、最後に\0バイトを含めて、対象の文字列を保持するのに十分な大きさの有効なメモリブロックを指し示す必要があります。

関連する問題