c - 尝试分配 2D 数组后出现 EXC_BAD_ACCES

标签 c malloc exc-bad-access

我正在为学校开发一个项目,并尝试使用两个二维数组。这是代码的一部分

int **matrice_prezent, **matrice_next;

尝试使用该位为两者分配内存:

*matrice_prezent = (int *)malloc((linii+2) * sizeof(int));
for(i = 0; i<linii+1; i++)
    matrice_prezent[i] = (int *)malloc((coloane+2) * sizeof(int));

*matrice_next = (int *)malloc((linii) * sizeof(int));
for(i = 0; i<linii; i++)
    matrice_next[i] = (int *)malloc((coloane) * sizeof(int));

第一部分效果很好,没有任何问题。但是,尝试对matrice_next执行相同的操作会导致此错误EXC_BAD_ACCESS。使用调试器(顺便说一句,我正在使用 Xcode,忘了提及)我看到在代码的开头(int **matrice_prezent,**matrice_next),第一个有一个地址0x ... 而后者具有 NULL

我知道这个错误意味着我正在尝试使用不可用的内存(或类似的内容)。我不确定这是否是我的错误(因为第一组 malloc 有效),或者我是否必须以某种方式强制它工作。任何帮助将不胜感激!

最佳答案

鉴于 int ** 的定义,您应该按以下步骤操作:

matrice_prezent = (int **)malloc((linii+2) * sizeof(int*));  // HEY *matrice_prezent is matrize_present[0] !!
assert (matrice_present != NULL);    // allways check memory allocation result
for(i = 0; i<linii+1; i++) {          // as previously 
    matrice_prezent[i] = (int *)malloc((coloane+2) * sizeof(int));
    assert (matrice_prezent[i] != NULL);   // really allways ! ;-)
    }

对于第二个,请按照与第一个相同的方式进行。如果您经常这样做,那么值得创建一个执行此操作的函数:

int** alloc2D (int lines, int cols) { /* ... */ }  

备注:您可以考虑使用 calloc()而不是 malloc() 因为它非常适合数组。此外,它将所有分配的元素设置为 0。

关于c - 尝试分配 2D 数组后出现 EXC_BAD_ACCES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26822639/

相关文章:

c++ - 哪一种是在 C++ 中分配未初始化内存的最惯用的方法

ios5 - MGTwitterEngine 在 iOS5 中崩溃

c - 我究竟做错了什么? (C 编程、指针、结构、函数)

不指定变量类型的 malloc 的正确语法

复制字符串 - 如何处理内存泄漏和错误情况?

iphone - 使用函数后的 EXC_BAD_ACCESS

ios - 我试过这段代码,但在 titleForHeaderInSection 中出现错误 "EXC_BAD_ACCESS"

c - C 程序中需要左值作为一元 '&' 操作数

c - 在 c 中使用 sscanf 的正则表达式忽略空格

c++ - 有没有办法将 C++ 源代码编译成二进制文件以便 gdb 可以看到它?