我有枚举类型:
enum Cell { ALIVE='X', DEAD='O' };
我用它分配一个数组:
h_board = (Cell*) malloc(width*height*sizeof(char));
我认为我没有做错,因为 Cell 值是字符(我想保留char大小的数据,但我关心可读性,这就是我使用枚举的原因。)
在free(h_board);
时抛出异常。在调试模式下,我可以看到堆损坏警告。我想我释放的内存比我分配的多,但我不明白为什么。我还尝试free((char*)h_board);
尝试强制执行字符大小释放,但问题仍然存在。
我该如何解决这个问题?
答案 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?