所以我使用gcc时出现内存问题。
我在结构中有这个2D数组。我试图通过面向对象的编程使自己的C代码更容易一些。
这里似乎有什么问题。每当我尝试free_Foo时,我都会遇到“./Foo”中的错误:双重释放或损坏(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);
}
答案 0 :(得分:1)
更改此声明
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
}