c++ - 为什么局部变量没有在这里销毁?
问题描述
我知道当我在函数中创建变量时,它会在函数调用后立即被销毁。如果指针 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;
}
解决方案
我知道当我在函数中创建变量时,它会在函数调用后立即被销毁。
正确的。
如果指针 x 在 f 调用后被销毁,为什么 p[0] 和 p[1] 仍然等于 123?
因为被销毁指针指向的动态对象数组x
不受被销毁指针的影响。
动态数组根本没有被删除,你有内存泄漏。
如果我删除 xp[0] 和 p[1] 是某种随机 int s;
如果您 delete x
, thenp
将无效并尝试通过它进行访问会导致未定义的行为。
PS 避免使用裸拥有的指针。还要避免不必要的动态分配。
推荐阅读
- firebase - 从firebase检索时,字符串在离开孩子后返回null
- javascript - 如何同步上传图片?
- excel - 如何修复条件格式无法在单元格上正常工作?
- vb.net - 如何解决VB.Net中的数学错误?
- c++ - 使用 Wininet 的 Https 客户端身份验证,使用非持久性根证书
- json - TypeScript 可选联合类型
- sql - 如何将 STUFF() 应用于三个表中的逗号?
- swift - Firebase swift - 如何根据特定唯一键列表打印出值(存储在数组中的唯一键)
- python - 在 Python3 中通过 PIP 访问模块的问题
- python - 我对 LinkExtractor 属性(restrict_xpath)做错了吗?不做回调