首页 > 解决方案 > 为什么局部变量没有在这里销毁?

问题描述

我知道当我在函数中创建变量时,它会在函数调用后立即被销毁。如果指针 x 在 f 调用后被销毁,为什么 p[0] 和 p[1] 仍然等于 123?

#include <iostream>

using namespace std;

int *p;

void f()
{
    int *x;

    x = new int[2];

    x[0] = x[1] = 123;

    p=x;

    /// delete x;  if i delete x p[0] and p[1] are some kind of random int s;
}
int main()
{   f();

    cout<<p[0]<<p[1];

    return 0;
}

标签: c++

解决方案


我知道当我在函数中创建变量时,它会在函数调用后立即被销毁。

正确的。

如果指针 x 在 f 调用后被销毁,为什么 p[0] 和 p[1] 仍然等于 123?

因为被销毁指针指向的动态对象数组x不受被销毁指针的影响。

动态数组根本没有被删除,你有内存泄漏。

如果我删除 xp[0] 和 p[1] 是某种随机 int s;

如果您 delete x, thenp将无效并尝试通过它进行访问会导致未定义的行为。


PS 避免使用裸拥有的指针。还要避免不必要的动态分配。


推荐阅读