绑定生命周期如何可以比对象生命周期更长?

时间:2015-10-07 00:55:58

标签: c malloc object-lifetime

我已经读过,对象绑定的名称可以比对象本身具有更长的生命周期。根据我的理解,当对象被破坏时,名称和对象之间的绑定也消失了。那么绑定生命周期如何比对象生命周期更长?请在C

中使用此示例代码进行说明
char *p = malloc(4);
strcpy(p, "abc");
free(p); // object gone, but binding of p, to a useless address, lives on.

2 个答案:

答案 0 :(得分:0)

问题的真正答案:

  

那么绑定生命周期如何比对象生命周期更长?

是:“它不能”。如你所说,p仍然有一个值,但是它不可用*所以任何“绑定”都必须被打破。 “绑定”是一种看待这个问题的奇怪方式。我可以看看你要去哪里,但我从来没有听说过你使用它的方式(在C语境中)。

*无法使用我的意思是“未定义的行为” - 它可能有用,但它不可靠,并且没有充分的理由去尝试(任何告诉你的人都在撒谎)

答案 1 :(得分:0)

自由(P); //对象消失了,但p绑定到无用的地址仍然存在。

变量P保存某些堆位置的内存地址。 当你调用free时它将内存返回堆,但是P仍然指向那个位置,除非有人覆盖p的值,使用类似的东西 p = NULL。 但是如果你不改变P的值,那么

1)如果P在函数内定义,它将保持值直到函数范围。

2)如果P是全局变量,它将保持值直到程序的生命周期。

持有已被释放的地址没有任何意义。它等同于持有一些垃圾数据。