所以我使用gcc有内存问题。
我把这个二维数组放在一个结构体中。我正在尝试用面向对象编程使这段C代码对我自己来说更容易一点。
这里有什么问题吗?每当我尝试free_Foo时,我就会遇到"Error in"。/Foo': double free or corruption (out): 0x0000000001713050 *
typedef struct {
char** map;
int height;
int width;
} Foo;
Foo* init_Foo(int width, int height){
Foo* f = (Foo*) malloc (sizeof(*f));
char** map;
map = (char**) malloc (height* sizeof(**map));
int i;
for ( i = 0; i < height; i++){
map[i] = (char*) malloc(width * sizeof(*map));
}
f->map = map;
f->height = height;
f->width = width;
return f;
}
void free_Foo(Foo* f){
int i;
for ( i = 0; i < f->height; i++){
free(f->map[i]);
}
free(f->map);
free(f);
}
修改语句
map = (char**) malloc (height* sizeof(**map));
map = (char**) malloc (height* sizeof( *map));
对应这个语句
for ( i = 0; i < height; i++){
map[i] = (char*) malloc(width * sizeof(*map));
}
for ( i = 0; i < height; i++){
map[i] = (char*) malloc(width * sizeof(**map));
}
表达**map
为char
型,*map
为char *
型
所以你可以写成
map = (char**) malloc (height* sizeof( char * )); // *map
for ( i = 0; i < height; i++){
map[i] = (char*) malloc(width * sizeof( char )); // **map
}