【发布时间】:2017-10-09 07:27:00
【问题描述】:
我有一个动态二维数组,大小为高*宽。
我想使用 realloc 来改变数组大小。
这是我的代码,但它不起作用。
我该怎么办?帮帮我!!
int main(){
char **img;
img = (char**)malloc(sizeof(char*)*height);
for(i=0;i<height;i++){
img[i] = (char*) malloc(sizeof(char)*width);
}
resize(height*2, width*2, img);
}
void resize(int height, int width, char **img){
int i;
img = (char**)realloc(img, sizeof(char)*height);
for(i=0;i<h;i++){
img[i] = (char*)realloc(img[i], width);
}
}
【问题讨论】:
-
首先,我建议您对在c 中模拟传递引用 进行一些研究。继续,
img的 new 元素在重新分配之后会是什么?提示:它们未初始化,不能按原样传递给realloc。最后,你永远不应该将你传递给realloc的指针赋值给realloc,以防realloc失败。 -
这不是二维数组。并且逻辑是有缺陷的,首先
free()不再需要的单个数组(如果有的话),然后调整指针数组的大小,然后分配新需要的单个数组并调整以前存在的数组的大小。当然,检查 eachmalloc()/realloc()调用中的错误。最后,修改局部变量会修改 copy,例如,您必须完成后返回img。 -
一般来说,“但它不起作用。”是不是合适的问题描述。
-
h未在任何地方定义