无法释放内存(断言错误)

时间:2013-04-03 20:00:20

标签: c pointers free

当我尝试释放循环缓冲区时,我收到了断言错误(表达式:crtisvalidheappointer)。为什么会这样?

相关结构:

typedef struct quote {
    unsigned int seconds;
    double rate;
} quote;

typedef struct cbuf {
    unsigned int max;
    unsigned int start;
    unsigned int end;
    unsigned int size;
    quote *quotes;
} cbuf;

mallocs和释放的代码块:

#define INITIAL_SIZE 10
static cbuf cb1 = {INITIAL_SIZE, 0, 0, 0, NULL};
cb1.quotes = (quote*)malloc(INITIAL_SIZE * sizeof(quote));
if(cb1.quotes == NULL)
{
    printf("Error - memory allocation failed.");
    exit(1);
}

free(&cb1);

3 个答案:

答案 0 :(得分:5)

free(&cb1);

您正试图释放cb1所在的内存,但

static cbuf cb1 = {INITIAL_SIZE, 0, 0, 0, NULL};

不是malloc ed。

free(cb1.quotes)

是你需要释放的东西。

答案 1 :(得分:4)

你无法释放你没有分配的内容:

free(&cb1);

答案 2 :(得分:0)

你唯一需要记住的是:你可以只释放你动态分配的内存

在您的情况下,您已为“cb1.quotes”动态分配内存而不是cb1 所以你必须释放cb1.quotes而不是cb1。

关于

荷姆斯