私は配列char *Input[11]
を持っています。私はそれにメモリを割り当てるのにmalloc()
を使います。malloc()の後で配列にアクセスすると突然セグメント化エラーが発生する
for(int i = 0; i < 12; i++)
Input[i] = "\0";
for(int i = 0; i < 12; i++)
{
Input[i] = malloc(256 * sizeof(char));
}
for(int i = 0; i < 12; i++)
{
strcpy(Input[i], "test");
}
printf("Input[11] is %s\n", Input[11]); // <- Here the seg fault happens
私が後でInput[11]
にアクセスしたい場合、セグメンテーションフォルトが発生します。 Input[11]
が指し示すものがない場合は、通常、このエラーが発生することがありますので、メモリの割り当て方法に問題があると思います。 Input[10]
以下にアクセスすると問題ありません。私はvalgrindのとそれをチェックし、それはエラーメッセージです:しかし、私は本当にこれはエラーがどこにあるのを除いて私に語ったのかわからないんだけど
==5633== 1 errors in context 1 of 1:
==5633== Invalid read of size 1
==5633== at 0x4098383: vfprintf (vfprintf.c:1632)
==5633== by 0x409D695: printf (printf.c:33)
==5633== by 0x8048A15: handle_command (swebsh.c:122)
==5633== by 0x8048BE6: main (swebsh.c:181)
==5633== Address 0x6e69622f is not stack'd, malloc'd or (recently) free'd
。どんな助けもありがとうございます。
編集:おっと、コードを簡素化するときに初期設定を忘れてしまいます。
Unsimplifyそれいくつかのより多くを書き換えることができます。 'Input'はどのように定義されていますか?人々の回答を無効にする方法でコードを編集するのではなく、まず[MCVE](http://stackoverflow.com/help/mcve)を投稿してください。 – StoryTeller
これを読んでくださいhttps://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – StoryTeller
私は答えにコメントを投稿するつもりでしたが、削除されました。 2回目の編集を試み、それが役立つかどうかを確認します。 –