【发布时间】:2021-07-23 04:50:18
【问题描述】:
示例代码
我写的代码有点像下面:
#include <stdio.h>
#include <stdlib.h>
struct record {
...
};
void record_cleanup(struct record *record)
{
printf("Deleting record %p\n", record);
free(record);
}
int main(void)
{
struct record record;
...
record_cleanup(&record);
...
return EXIT_SUCCESS;
}
错误
但是,在编译时,我收到了一个错误:
warning: attempt to free a non-heap object
是什么原因造成的,为什么?
【问题讨论】:
-
record instance = malloc(sizeof(record));这是怎么回事? -
整个sn-p很混乱!
-
@SouravGhosh 作为一个仍在学习交易的相对较新的堆栈溢出用户,我尽量让我的问题和答案尽可能彻底......请更具体地说明你对什么感到困惑.关于您的第一条评论,即获取
record的大小,并进行malloc调用以便为该结构分配内存。我已经对我的问题进行了编辑,因为malloc返回void*并且必须转换为指针类型。 -
那个小小的
*有很大的不同,你知道的! -
变量
instance,在这种情况下,是否分配了从具有相应参数的参数接收到的值,该参数具有分配的内存。关键是,instance是一个自动局部范围变量,&instance没有分配内存。变量的类型及其赋值令人困惑,因为在这种情况下它们并不真正相关/相关。