释放 C 语言中的 2D 数组。 "double free or corruption"和"invalid next size"



所以我使用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));  
}

表达**mapchar型,*mapchar *

所以你可以写成

map = (char**) malloc (height* sizeof( char * )); // *map
for ( i = 0; i < height; i++){
    map[i] = (char*) malloc(width * sizeof( char ));   // **map
}

最新更新