C 指针挫折 EXC_BAD_ACCESS

标签 c pointers

有人可以告诉我以下代码有什么问题吗?我收到 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/

相关文章:

c - 在c中解析一个char数组

在 GNU/Linux 下更改 CPU 寄存器的值

c++ - 从 dll/共享库返回指针会导致段错误

c - 双指针作为函数参数

c - 结构内指针的内存分配

c - 为什么这不会进入while循环?

c - 什么是套接字类型?

c - 不在 C 中转换指针会导致问题吗?

c++ - 如何在我类(class)的 .cpp 文件中定义静态数组

c - 查找字符串中最长的单词