这样的C++程序正确吗?

来源:百度知道 编辑:UC知道 时间:2024/07/11 01:11:40
#include <iostream>

int main()
{
int VarOne;
int * pVar = & VarOne;
VarOne = 6;
* pVar = 7;
std::cout << * pVar << std::endl;

int VarTwo = 9;
pVar = & VarTwo;
std::cout << * pVar << std::endl;
return 0;
}

在重新给指针赋值之前,不需要删除指针?
那为什么可以直接给其重新赋值?

正确。

不需要,而且也不能这么做,因为VarOne和VarTwo变量的内存是在堆栈上,不是在堆上。

只有申请了动态内存才会有释放内存的要求,也就是C中malloc以及C++中的new申请的内存才需要free或者delete.而且必须在free或者delete后加上赋值为NULL.因为释放内存后指针成为悬垂指针(野指针),这样是为了防止不小心的再次解引用指针造成灾难性的后果.
直接申请的对象都是在程序栈上的.在作用域结束时自动释放.

不是在堆内存中申请的内存不需要释放
“删除指针”的说法不是准确,因为即使用free或者delete释放了申请的内存,指针本身还是存在的,只是原先指向的那块地址现在自由了,那块地址可以被重新利用

明显正确的,我用VC++运行过了

正确的