【发布时间】:2016-02-03 19:36:24
【问题描述】:
我想重新分配一个二维数组,以便第二个数组中的数组变得更大,所以我想要存储的东西比我想要存储它们的数组更大,我想让数组更大。问题是我真的不知道该怎么做。我让它编译没有错误,但是在 Valgrind 中我看到了很多内存错误,所以我做错了。我看到了a previous question about this here,但我不太了解它,因此非常感谢任何有关如何执行此操作的帮助和解释。
到目前为止我有这个。
int **create2darray(int a, int b) {
int i;
int **array;
array = malloc(a * sizeof(int *));
assert(array != NULL);
for (i = 0; i < a; i++) {
array[i] = calloc(b, sizeof(int));
assert(array[i] != NULL);
}
return array;
}
int **reallocArray(int **array, int size, int i) {
int i;
int **safe_array;
safe_array = realloc(*array ,2 * size);
assert(safe_array != NULL);
array = safe_array;
return array;
}
void free2DArray(int **array, int m) {
int i;
for (i = 0; i < m; i++) {
free(array[i]);
}
}
int main(int argv, char *argc[]) {
int i;
int size;
int **testArray = create2darray(1, 10);
size = 10;
for(i = 0; i < size; i++) {
testArray[0][i] = 2;
}
testArray[0] = reallocArray(testArray, size, 0);
size = 2 * size;
for(i = 9; i < size; i++) {
testArray[0][i] = 3;
}
for(i = 0; i < size; i++) {
printf("%d", testArray[0][i]);
free2DArray(testArray, size);
}
return 0;
}
【问题讨论】:
-
你遇到了什么错误?
-
不太清楚你想要重新分配什么或者
reallocArray的最后一个参数是什么。目前,您只重新分配第一行。当您希望整个数组增长时,您必须像在createArray中一样进行两级重新分配。 -
你是想说增加数组的列数吗?
标签: c arrays allocation