Куча коррупции на свободе (...) - PullRequest
1 голос
/ 22 февраля 2012

У меня есть enum type:

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

И я выделяю для него массив:

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

Я предполагаю, что я не делаю это неправильнопоскольку значения Cell являются символами (я хотел бы остановиться на данных размера символов, но меня интересует удобочитаемость, поэтому я использовал enum .)

Upon free(h_board); Исключение выдается.В режиме отладки я вижу предупреждение о повреждении кучи.Я предполагаю, что освобождаю больше памяти, чем выделяю, но не понимаю почему.Я также пытался free((char*)h_board); пытаться принудительно освободить размер символа, но проблема сохраняется.

Как я могу это исправить?

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Прежде всего, Cell - это его собственный тип данных (который не обязательно соответствует char), поэтому используйте malloc с этим (плюс, мы не приводим malloc в C):

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

Во-вторых, нам нужен полный код, чтобы помочь вам точно. Это должно работать без ошибок, возможно, вы можете построить отсюда:

#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;
}
2 голосов
/ 22 февраля 2012

Это должен быть sizeof (Cell).Делать какие-либо предположения о размере перечисления может быть опасно.Для справки: Каков размер перечисления в C?

...