堆积腐败免费(...)

时间:2012-02-22 13:09:07

标签: c++ free heap-corruption

我有枚举类型:

enum Cell { ALIVE='X', DEAD='O' };

我用它分配一个数组:

h_board = (Cell*) malloc(width*height*sizeof(char));

我认为我没有做错,因为 Cell 值是字符(我想保留char大小的数据,但我关心可读性,这就是我使用枚举的原因。)

free(h_board);时抛出异常。在调试模式下,我可以看到堆损坏警告。我想我释放的内存比我分配的多,但我不明白为什么。我还尝试free((char*)h_board);尝试强制执行字符大小释放,但问题仍然存在。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

首先,Cell是它自己的数据类型(不一定映射到char),因此请使用malloc(另外,我们不会将malloc转换为Cell *h_board = malloc(width * height * sizeof(Cell)); C):

#include <stdlib.h>

int main(int argc, char **argv) {
    Cell *h_board;

    h_board = malloc(20 * 30 * sizeof(*h_board));
    free(h_board);

    return 0;
}

其次,我们需要完整的代码才能准确地帮助您。这应该没有任何错误,也许你可以从这里构建:

{{1}}

答案 1 :(得分:2)

应该是sizeof(Cell)。对枚举的大小做出任何假设都是危险的。 仅供参考:What is the size of an enum in C?