0

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

相关结构:

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;

malloc 和释放的代码块:

#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);
4

3 回答 3

5
free(&cb1);

您正在尝试释放cb1驻留的内存,但是

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

那不是malloc编辑。

free(cb1.quotes)

是你需要释放的东西。

于 2013-04-03T20:02:22.880 回答
4

你不能释放你没有分配的东西:

free(&cb1);
于 2013-04-03T20:02:13.197 回答
0

您唯一需要记住的是:您只能释放动态分配的内存

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

带着敬意

希姆斯

于 2013-04-03T20:42:00.330 回答