在C

时间:2017-11-02 16:04:23

标签: 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));

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

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

我得到了一个&#34; EXC_BAD_ACCESS&#34;运行时错误。

可能我错过了一些相当简单的东西,但因为我是C的新手并且无法弄清楚我的错误。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

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

您需要添加以下内容:

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

(同样适用于重新分配:首先在循环中释放数组,然后释放指针数组)

除了: