我查看了许多关于这个问题的类似问题,但大多数问题似乎都集中于将指针作为参数传递给函数而不是指针的地址,所以我没有找到答案。
第 11 行发生段错误。为什么?
干杯。
void allocateMem(int **ptr)
{
int i = 0 ;
*ptr = malloc(100 * sizeof(int)) ;
if(*ptr != NULL)
{
for(i = 0 ; i < 100 ; i ++)
{
*ptr[i] = i ; //segfault
printf("%d %d\n" , i , *ptr[i]) ;
}
free(*ptr) ;
}
else
exit(0) ;
}
int main(int argc , char *argv[])
{
int *ptr = NULL ;
allocateMem(&ptr) ;
return 0 ;
}
这是一个优先权问题。
*ptr[i]
相当于*(ptr[i])
您想要的(*ptr)[i]
。自然,*(ptr[i])
可能会导致段错误,因为动态分配的数组的内容是不确定的,然后您正在取消引用该不确定的值。对于您的代码的其他建议:
i
。*ptr
。 这样,如果发生内存分配失败,指向的原始内存*ptr
仍然可以寻址。