【发布时间】:2012-02-22 13:09:07
【问题描述】:
我有这个枚举类型:
enum Cell { ALIVE='X', DEAD='O' };
我用它分配了一个数组:
h_board = (Cell*) malloc(width*height*sizeof(char));
我认为我没有做错因为 Cell 值是字符(我想保留字符大小的数据,但我关心可读性,这就是我使用 enum 的原因。)
free(h_board); 引发异常。在调试模式下,我可以看到堆损坏警告。我想我释放的内存比分配的多,但我不明白为什么。我还尝试free((char*)h_board); 尝试强制执行字符大小释放,但问题仍然存在。
我该如何解决这个问题?
【问题讨论】:
-
您在某处覆盖了某些内容。显示一些代码?
-
h_board 的类型是什么?我假设它是
Cell*。 Valgrind 告诉你什么?您能否输入重现此问题所需的最少代码并向我们展示 h_board 会发生什么? -
我还没有发现任何问题,但您最好使用
sizeof(Cell)而不是sizeof(char)。 -
单元格值不是字符而是整数,最好使用
sizeof(Cell) -
@cnicutar @Eregrith 最少的代码就是这样。将
h_board定义为Cell*,放入main(),就可以运行了。
标签: c++ free heap-corruption