【发布时间】:2012-11-15 17:05:51
【问题描述】:
我阅读了大量的 tutos 和 sn-ps,但我仍然不明白为什么会出现段错误:
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)
我见过很多类似的sn-ps,但肯定有一些我深深的误解。
【问题讨论】:
-
当有人从“大量的 tutos 和 sn-ps”中学习时,我感到奇怪的警惕......
-
您应该检查您的
malloc呼叫是否有错误。 -
@KerrekSB:非常有趣。你是谁,你碰巧认识吗?
-
@phocean:嗯,对于初学者来说,我在野外看到了很多“tutos and sn-ps”,以及类似的问题;此外,我对 C++ 的复杂性有所了解,并且想知道如果拼出“教程”已经对注意力造成负担,是否可以解决它...... :-)(但请查看我们推荐的书单!)
-
@KerrekSB 这是一个 C 问题,并不是说 C 是一种可以从不同的 Internet 资源中学习的好语言。
标签: c pointers segmentation-fault