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

这样delete动态分配的内存有没有错?解决方案

2012-02-26 
这样delete动态分配的内存有没有错? i1int*pnewint[i]i++delete[]p虽然编译运行正常。[解决办法]OK的

这样delete动态分配的内存有没有错?

i=1;
int   *p   =   new   int[i];
i++;
delete   []p;
虽然编译运行正常。

[解决办法]
OK的
[解决办法]
int *p = new int; //申请了一个 int 类型的空间
delete []p; //这是释放数组空间的方式 你改成delete p; 就对了

[解决办法]
一般delete 后最好将指针再赋成NULL.
不过你那样一般没有错误,但有时会出现意料不到的问题.
[解决办法]
会出现野指针
[解决办法]
谁告诉你delete和delete[]是等价的啊,有很大差别。

new和delete,new[]和delete[],必须配对使用,混合使用导致何种结果,C++标准未定义。
[解决办法]
1、会出现野指针,也就是再使用if (NULL != p)时判断不起作用。
2、c++是面向对象的语言,万事万物皆对象,int也不列外,只是int是c++内部的定义类型,也就是所谓的简单类型。int()调用的是int对象的无参数的构造函数。
3、new[]和delete[],new和delete必须匹配使用,在重载operator new和operator delete的时候,还须提供operator new[]和operator delete[](在c++必知必会这本书上说是必须的,一般被人遗忘),operator new[]是这个对象的数组形式的构造函数。
4、对于简单的类型,
int *p = new int[i];
i++;
delete []p;
调用delete和delete[]效果是一样的。而对于复杂的数据类型,则就不能这样认为,因为delete只调用一次析构函数,而delete[]调用多次析构函数(但也不排除一次,就是LZ那样定义的数组)

热点排行