我对var范围和指针有疑问。 这是一个示例函数:
int *double(int a)
{
int p = a*2;
int *ret = &p;
return ret;
}
这就是问题所在: 在函数返回调用者之后,它应该从内存中删除其中声明的每个变量。
在这个函数中我只返回“p”的地址(只在函数中声明)但是当我在main中使用它时,例如,函数“double”分配的内存空间还没有删除。
为什么呢?
答案 0 :(得分:1)
内存不再有效;在double
返回后访问它时发生的情况是未定义的行为。这意味着一切皆有可能:
可能是该值尚未被其他东西覆盖(在您的情况下可能发生的事情)。
可能是其他东西已写入该地址,因此该值现在是随机垃圾。
可能是你的代码打开了一个平行维度的虫洞,导致了邪恶的空间章鱼入侵,这让我们所有人都感到沮丧。
所以,基本上,我不推荐它。