c - 为C中的二维数组重新分配内存

标签 c realloc

我的目标是在 C 中为二维 int 数组动态重新分配内存。我知道已经有几个关于该主题的问题,但不幸的是我的代码无法正常运行,我不知道出了什么问题。

首先我分配内存:

int n = 10;
int m = 4;
int** twoDimArray;
twoDimArray = (int**)malloc(n * sizeof(int*));
for(int i = 0; i < n; i++) {
   twoDimArray[i] = (int*)malloc(m * sizeof(int));
}

并用整数初始化数组:

for(int i = 0; i < n; i++) {
   for(j = 0; j < 4; j++) {
      twoDimArray[i][j] = i * j;
   }
}

然后我使用 realloc() 动态重新分配内存:

int plus = 10;
int newArraySize = n + plus;
twoDimArray = (int**)realloc(twoDimArray, newArraySize * sizeof(int));

我希望我的数组 twoDimArray 现在可以在 [10][0] 访问,但是在运行时

printf("twoDimArray[10][0] = %d\n", twoDimArray[10][0]);

我收到“EXC_BAD_ACCESS”运行时错误。

可能我遗漏了一些相当简单的东西,但由于我是 C 语言的新手,无法弄清楚我的错误。感谢您的帮助。

最佳答案

重新分配指针数组是必要的,但是那样的话您只有 n 值指向有效的东西。您需要分配其余的子数组,因为新分配的内存指向未分配/无效区域。错误不是来自访问指针,而是来自取消引用它。

您需要添加如下内容:

for(int i = n; i < n+plus; i++) {
   twoDimArray[i] = malloc(m * sizeof(int));
}

(解除分配也是如此:首先在循环中解除分配数组,然后解除分配指针数组)

旁白:

关于c - 为C中的二维数组重新分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079742/

相关文章:

c++ - 为什么下面的语句不起作用?

objective-c - realloc 仅将分配增加 2 的幂

c - 为什么编译器不给我错误?

C - 迭代多次 fork

c - 通过知道线程名称来设置线程的优先级

c - 指针声明

linux - 使用 valgrind 查找不断增长的 realloc

c - 如何有效地使用位操作找到 64 位值中唯一设置位的位置?

c - 这是 realloc() 的正确用法吗?

linux - tcl 脚本中止 : unable to realloc xxx bytes