我读到过名称到对象绑定的生存期可能比对象本身的生存期更长。根据我的理解,当对象被销毁时,名称和对象之间的绑定也就消失了。那么绑定生命周期怎么会比对象生命周期长呢?请使用C
中的示例代码进行解释。char *p = malloc(4);
strcpy(p, "abc");
free(p); // object gone, but binding of p, to a useless address, lives on.
问题的真正答案:
那么绑定生存期怎么可能比对象生存期长呢?
是:"It can't"。正如你所说,p
仍然有一个值,但它是不可用的,所以任何"绑定"一定已经被打破了。用"绑定"这个词来看待这个问题有点奇怪。我大概能理解你的意思,但是我从来没有听过像你这样使用它(在C上下文中)。
*我说的不可用是指"未定义的行为"——它可能有效,但它不可靠,而且从来没有一个好的理由去尝试它(任何告诉你不这样做的人都是在撒谎)
free(p);//对象消失了,但是p的绑定到一个无用的地址,仍然存在。
变量p保存某个堆位置的内存地址。当您调用free时,它将内存返回给堆,但P仍然指向该位置,除非有人覆盖P的值,使用类似的东西p = NULL。但如果不改变P的值,则
1)如果在函数内部定义了p,它将一直保持值直到函数作用域
2)如果p是全局变量,它的值将一直保持到程序的生命周期。
保留已释放的地址没有任何意义。它相当于保存了一些垃圾数据