【发布时间】:2014-03-08 18:55:35
【问题描述】:
char (*A)[size] = malloc(sizeof(char[size][size]));
如果我将 size 初始化为 10,但最终我需要更多内存,我怎样才能在不丢失内容的情况下为 A 重新分配内存?
我尝试过这样的事情:
char (*B)[sizeColumns] = realloc(A, sizeof(char[sizeColumns][sizeColumns]));
A = B;
当我需要重新分配时,我开始遇到问题。
char linearray[1025];
char *line;
int stars = 0;
int sizeColumns = 4;
int usedColumns = 0;
char (*A)[sizeColumns] = malloc(sizeof(char[sizeColumns][sizeColumns]));
int i;
int j;
int rows = 5;
for(i = 0; i < rows; i++ ){
if(i==0){
A[i][0] = '+';
}
else{
A[i][0] = '|';
}
}
usedColumns++;
while(fgets(linearray,1024,stdin) != NULL){
line = linearray;
sscanf(line,"%d", &stars);
if (usedColumns == sizeColumns) {
sizeColumns *= 2;
char (*B)[sizeColumns] = realloc(A, sizeof(char[sizeColumns][sizeColumns]));
A = B;
}
for(i = 0; i < stars +1; i++ ){
if(i==0){
A[i][usedColumns] = '-';
}
else{
A[i][usedColumns] = '*';
}
}
usedColumns++;
}
如果我在上面输入我想要的 1,2,3,4:
+----
|****
| ***
| **
| *
如果我将 sizeColumns 初始化为上面的 5,我可以成功输出,但如果它是 4,那么我得到:
+----
-****
*?***
* **
* *
我看不到第一列的内容是如何被覆盖的。如果我不需要重新分配,一切都会正常工作。
【问题讨论】:
-
不推荐以这种方式在 c 中重新分配二维数组。您失去了列/行的一致性。
-
工作正常如果输入列大小或更高的数量,它会访问超出范围的数组。
标签: c pointers dynamic multidimensional-array realloc