我有一個數組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它更多一些。如何定義「輸入」?首先發布[MCVE](http://stackoverflow.com/help/mcve),而不是以無效的方式編輯代碼。 – StoryTeller
並閱讀此https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – StoryTeller
我要發表評論的答案,但它被刪除。將嘗試第二次編輯,看看是否有幫助。 –