首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学C++,请问关于new和delete的有关问题

2013-09-27 
初学C++,请教关于new和delete的问题。这是代码。#include iostreamusing namespace stdint main(){int* p

初学C++,请教关于new和delete的问题。
这是代码。

#include <iostream>

using namespace std;

int main()
{
    int* p = new int;
    *p = 8;
    cout<<*p<<endl;
    delete p;
 // p = new int;
    *p = 100;
    cout<<*p<<endl;
    delete p;
    return 0;
}


是这样的。我用new申请了一个内存,然后存入了8,然后将p所指向的内存释放掉。
这时我再用*p,存入100也可以成功。
我想问的是,*p所指向的内存不是已经释放掉了么?那么这个100存入了哪里?
如果我加上 p = new int ,得到的结果也是一样的。
所以,加上下面这行的 p = new int; 和不加有什么区别? c++
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

首先要理解“释放”的意思。我的理解是delete释放后,你new的空间不再受你支配和使用(或者说系统不保证你的读写还有效),所以你尝试往里存写数据,没有错误,但不代表可以这样使用,因为如果系统正好使用了这块内存,而你往其中写入数据后破坏了系统的数据可能引起严重的错误等情况发生。


也就是说,在delete之后,之前的指针指向哪里就不确定了,这是修改指针的值有可能会引起错误?
不是,delete不会改变指针的指向,指针还是指向new的地址,只是这地址标示的内存对于你已经失去了拥有权(虽然你还可以存取,但可能引起未知的错误)。


对这块内存失去了使用权,别的东西就可以使用这块内存,如果再修改这块内存就有可能产生错误,这样理解对了吧?
是的,你修改的数据可能是重要数据,可能会引起灾难性错误,而你读取的数据也可能是别人的数据

热点排行