【发布时间】:2015-12-20 20:44:53
【问题描述】:
当我动态分配一个结构,然后尝试释放它时,它似乎重新分配它。
typedef struct OBJ_T
{
int param1, param2;
} OBJ;
OJB* Construct(int par1, int par2)
{
OBJ* x = malloc(sizeof(OBJ));
x->param1 = par1;
x->param2 = par2;
return x;
}
void freeup(OBJ *x)
{
printf("x pointer -> %d ", x);
free(x);
x=NULL;
printf("\nx pointer -> %d\n", x);
}
int main()
{
OBJ foo = *Construct(10, 20);
freeup(&foo);
freeup(&foo);
return 0;
}
结果是:
x pointer -> 2752216
x pointer -> 0
x pointer -> 2752216
x pointer -> 0
所以在释放并清空指针之后,如果我再次检查它,它会恢复到原来的状态。那是问题吗?或者它是免费的,我再也不用担心了?
【问题讨论】:
-
指针滥用组想和你谈谈。严肃地说,您正在丢失
OBJ foo = *Construct(10,20)行中的原始指针。 -
您似乎有 Java 或 Delphi 背景?所以有一些关于指针的知识。
-
无法在堆栈上分配的内存上调用
free():freeup(&foo); -
@alk 但似乎可能,很明显:你不应该这样做。你能描述一下这里发生了什么吗? UB?
-
@Wolf:“这似乎是可能的。”是 C 语言中的一个非常弱论点。
标签: c struct structure dynamic-allocation