当我尝试释放循环缓冲区时,我收到了断言错误(表达式: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);
答案 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。
关于
荷姆斯