int main()
{
int *p=new int;
*p=1;
delete p;
*p=2;
return 0;
}
//上面的delete之后p的类型不变,它所储存的地址依旧存在且依旧能够对*p进行赋值。
//那么教材上为什么还要在5,6句之间插上int *p=new int呢?
//有人说插上那句话是为了给*p重新分配空间。那么既然不加那句就可以赋值进去,说明空间还是存在的何必再重新分配空间给它呢?
//又有人说不重新分配的话会出错,那么到底是什么样的错误呢?
//一句话就是delete之后的再new是否必须?
//顺便提一下,我把p改成指向类的变量后运行也没有发现问题。
c++中delete之后的再new问题
作为指针型简单变量使用删不删,都可以用,就等于已声明了:int *p;指针本身已有存储单元。new int; 是给它分配存放指向数值的单元。delete 只删了 存放指向数值的单元。指针本身单元还在。只要它的使用符合语法,仍然可用。例如:a = 2;b=3;p = &a; printf("%d\\n",*p);p = &b; printf("...
C++ 中关于new和delete使用的一些疑问
也就是说如果你的程序中常常new一些内存而不delete,你的程序占用的内存会不断增大。但是有一些全局数据,可以new了不delete,在程序开始运行时,创建这些数据,程序运行过程中使用这些数据,直到程序结束。A3.写法错误。 如果new一个数组,必须使用delete[]符号。A4.现代操作系统,程序结束后,会收回这个...
C++中 delete的实质是什么?
delete之后,下次再重新申请的时候可以再申请这块内存地址,也就是将这块地址放到了空闲链表上,对于这块地址的内容,没有进行清空处理(也没有必要);由于你没有将p赋为NULL,所以p指针还是指向这块内存空间。如果不delete的话,你这块内存是不能在申请使用的,也就是所谓的内存泄露。对于delete之后的指针...
c++中delete过后的指针居然还能用 如: int *p=new int(5); delete...
没有问题,依旧能读取东西出来;但是下一次运行,未必能成功。更严重的情况就是导致崩溃。
关于c++ new delete的问题
new是在堆中申请内存并返回该内存首地址,delete是把内存还给进程。。。这两个关键字的用途是使用动态内存。。。你肯定学过静态变量和自动变量,自动变量是有作用域限制的,出了作用域你就不能用了。。静态变量虽然可以通过指针在任何位置使用,但有一个缺陷就是一点声明静态变量这个变量不能删除,永久占...
C++ delete 类对象引用 不能正确运行
new和delete是成对出现的,没有new,就不要delete。new是申请内存空间给一个指针,申请后如果不delete,那部分内存就一直占着,直到重启机器。对于非指针变量,内存自动分配,用完后自动释放,不要你关心的。总之记住,一个new对应一个delete,就好比括号一样,没有对应的左括号,这个右括号不就是错误了...
delete运算符的问题,求c++大神帮忙解决
:in);infile2.getline(s2,50,'\\n');这些语句时,如果输入的字符超过一个,就已经造成越界错误。最后的delete运算仅仅是将你的错误显示出来而已。正确的分配应该是这样,如果你希望有一个 80字节的空间,语句如下:char * p1;p1 = new char[80];再使用p1去保存80个字节以内的数据就不会错了。
c++中不用new也能用delete吗? 什么情况下要用new,什么情况下不要用...
首先,new和delete要成对使用,否则会造成内存泄漏。什么时候使用new,使不使用完全取决于编程人员。new的作用是在堆内存中申请一块内存,并且申请内存的大小可以在程序运行时动态的决定。这个就是堆内存的最大价值之一。因为,于局部变量的栈内存,全局变量和static变量的静态内存都必须在编译阶段确定,在...
老生常谈,delete和delete[]的问题
new和delete对应,new[]和delete[]对应,不能混用.我用的VC6,混用会导致程序崩溃.链表明显是一个结点一个结点生成的,每个结点肯定都是new出来的,所以释放的时候也应该一个一个的delete
C++中delete和new的所需要的时间,哪个高,为什么
一般情况是new高,因为分配内存时要从堆中找出一块合适的大小,又不会太浪费,又不会造成太多碎片,有时还要合并一些内存块,这个过程实际是很复杂的算法完成的 这个工作要么是delete之后做,要么是new之前做,我觉得new之前做比较靠谱,因为delete之后做,其实做到什么地步算好,很多指标是要靠猜的,怎么...