有人可以告诉我以下代码有什么问题吗?我收到 EXC_BAD_ACCESS
,无法访问内存。
原因:KERN_INVALID_ADDRESS
我声明了一个由 7 个指针组成的全局数组,每个指针指向一个不同大小的 int 数组。
int **pt_all_arrays[7];
在我的函数A()
for (int i = 0; i < 7; ++i) {
int array_size = function_that_returns_array_size();
int *myarray = (int *)malloc(array_size * sizeof (int));
// DO WORK...
// Store the array in the big array
*(pt_all_arrays[i]) = myarray; <-----EXCEPTION
}
最后一行抛出异常。
我在 Mac 上运行,gcc -std=gnu99
最佳答案
你想声明为
int *pt_all_arrays[7];
然后分配为
pt_all_arrays[i] = myarray;
使用 int **pt_all_arrays[7];
可以创建指向 int 指针的指针数组,这不是您想要的。
并且使用 *(pt_all_arrays[i]) = myarray;
您正在尝试更改为无效的数组地址。
例子
int array[7];
int *pi;
array = pi; //this is not valid.
关于C 指针挫折 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16442250/