我已经读过,对象绑定的名称可以比对象本身具有更长的生命周期。根据我的理解,当对象被破坏时,名称和对象之间的绑定也消失了。那么绑定生命周期如何比对象生命周期更长?请在C
中使用此示例代码进行说明char *p = malloc(4);
strcpy(p, "abc");
free(p); // object gone, but binding of p, to a useless address, lives on.
答案 0 :(得分:0)
问题的真正答案:
那么绑定生命周期如何比对象生命周期更长?
是:“它不能”。如你所说,p
仍然有一个值,但是它不可用*所以任何“绑定”都必须被打破。 “绑定”是一种看待这个问题的奇怪方式。我可以看看你要去哪里,但我从来没有听说过你使用它的方式(在C语境中)。
*无法使用我的意思是“未定义的行为” - 它可能有用,但它不可靠,并且没有充分的理由去尝试(任何告诉你的人都在撒谎)
答案 1 :(得分:0)
自由(P); //对象消失了,但p绑定到无用的地址仍然存在。
变量P保存某些堆位置的内存地址。 当你调用free时它将内存返回堆,但是P仍然指向那个位置,除非有人覆盖p的值,使用类似的东西 p = NULL。 但是如果你不改变P的值,那么
1)如果P在函数内定义,它将保持值直到函数范围。
2)如果P是全局变量,它将保持值直到程序的生命周期。
持有已被释放的地址没有任何意义。它等同于持有一些垃圾数据。