我讀噸TUTOS和片斷的,但我還是不明白爲什麼我得到這個段錯誤:問題以C雙指針分配
int fun(char **p) {
int i;
*p = malloc(2);
*p[0]=10;
*p[1]=20; // segfault NULL pointer
printf("fun()/n");
for (i=0; i<2; i++)
printf("%d ",*p[i]);
}
int main(int argc, const char *argv[])
{
char* buffer;
int i;
fun(&buffer);
printf("main()\n");
for (i=0; i<2; i++)
printf("%d ",buffer[i]);
return 0;
}
在gdb中,它提供了:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
0x0000000100000dea in fun (p=0x7fff5fbffab0) at test.c:10
10 *p[1]=20;
(gdb) p *p[0]
$1 = 10 '\n'
(gdb) p *p[1]
Cannot access memory at address 0x0
(gdb)
我已經看到很多類似的片段,但肯定有一些我深有誤解。
當有人從「tutos and snippets噸」中學習時,我感到奇怪的警惕...... –
你應該檢查你的'malloc'調用錯誤。 – squiguy
@KerrekSB:非常有趣。你是誰,你碰巧知道嗎? – phocean