以下のコードでセグメント化エラーが発生するのはなぜですか?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;
}
以下のコードでセグメント化エラーが発生するのはなぜですか?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;
}
*str_new
を初期化していないので、ランダムアドレスにstr_old
をコピーしています。 あなたがこのいずれかを実行する必要があります。malloc関数を使用しているときではない既に持っている場合は
char str_new[100];
または
char * str = (char *) malloc(100);
あなたは
#include <stdlib.h>
する必要があります。
str_new
初期化されていないポインタであるので、あなたは(擬似)ランダムなアドレスに書き込みをしようとしています。
str_new
は有効なメモリを指していないため、初期化されておらず、ガーベッジが含まれており、セグメンテーションエラーが発生した場合でもマッピングされていないメモリを指している可能性があります。 str_new
は、strcpy()
を呼び出す前に、最後に\0
バイトを含めて、対象の文字列を保持するのに十分な大きさの有効なメモリブロックを指し示す必要があります。