以下代码给出了分段错误。我不明白为什么。请参见..
#include <stdio.h>
#include <stdlib.h>
int main()
{
int **ptr;
int *val;
int x = 7;
val = &x;
*ptr = (int *)malloc(10 * sizeof (*val));
*ptr[0] = *val;
printf("%d\n", *ptr[0] );
return 0;
}
在使用 gdb 进行调试时,它说:
Program received signal SIGSEGV, Segmentation fault.
0x0804843f in main () at temp.c:10
*ptr = (int *)malloc(10 * sizeof (*val));
任何有关此事的帮助将不胜感激。
int **ptr;
*ptr = (int *)malloc(10 * sizeof (*val));
第一条语句声明一个双指针。
第二个取消引用指针。为了能够取消引用它,指针应该指向一些有效的内存。因此它不会出现段错误。
如果您需要为指针数组分配足够的内存,您需要:
ptr = malloc(sizeof(int *) * 10);
Now ptr
指向一个足够大的内存10
指向int
.
现在可以使用本身是指针的每个数组元素来访问ptr[i]
在哪里,
i < 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)