C指针和var范围

时间:2017-08-28 15:57:50

标签: c pointers

我对var范围和指针有疑问。 这是一个示例函数:

int *double(int a)
{
    int p = a*2;
    int *ret = &p;

    return ret;
}

这就是问题所在: 在函数返回调用者之后,它应该从内存中删除其中声明的每个变量。

在这个函数中我只返回“p”的地址(只在函数中声明)但是当我在main中使用它时,例如,函数“double”分配的内存空间还没有删除。

为什么呢?

1 个答案:

答案 0 :(得分:1)

内存不再有效;在double返回后访问它时发生的情况是未定义的行为。这意味着一切皆有可能:

  1. 可能是该值尚未被其他东西覆盖(在您的情况下可能发生的事情)。

  2. 可能是其他东西已写入该地址,因此该值现在是随机垃圾。

  3. 可能是你的代码打开了一个平行维度的虫洞,导致了邪恶的空间章鱼入侵,这让我们所有人都感到沮丧。

  4. 所以,基本上,我不推荐它。