我正在为学校开发一个项目,并尝试使用两个二维数组。这是代码的一部分
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/