开释堆内存失败delete [] p
释放堆内存失败delete [] p
有一道题目是这样的:
从标准设备读入的元素数据建立一个int 型vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素复制给新数组。
程序如下:
编译时没有任何错误提示,但执行显示结果后,并没有出现“按任何键结束”字样,如下图:
![开释堆内存失败delete [] p 开释堆内存失败delete [] p](/default/index/img?u=aHR0cDovL3d3dy5teWV4Y2VwdGlvbnMubmV0L2ltZy8yMDE0LzEyLzA4LzExMDgzNTc5LmpwZw==)
经过调试,显示是在最后释放堆内存时错误,如下图:
![开释堆内存失败delete [] p 开释堆内存失败delete [] p](/default/index/img?u=aHR0cDovL3d3dy5teWV4Y2VwdGlvbnMubmV0L2ltZy8yMDE0LzEyLzA4LzExMDgzNTgwLmpwZw==)
对于这一点不明白,指点!!!
------解决思路----------------------
int *p=new int(ivec.size()); //这里的小括号要改成中括号
------解决思路----------------------
int *p = new int(10); // 给p分配一个int的空间,该int初始化为10,cout << *p 可以验证
int *p = new int(10); // 给p分配10个int的空间
------解决思路----------------------
初始化失败
有一道题目是这样的:
从标准设备读入的元素数据建立一个int 型vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素复制给新数组。
程序如下:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//定义vector对象并通过键盘输入其值
vector<int> ivec;
int ival;
cout<<"输入整数,以Ctrl+Z结束"<<endl;
while(cin>>ival)
ivec.push_back(ival);
//创建动态数组
int *p=new int(ivec.size());
if(p==nullptr)
{
cout<<"No enough memory?!"<<endl;
return -1;
}
//将vector对象的值复制给动态数组
int *tp=p; //不要改变指向动态数组的指针p,以备在后面释放内存时使用
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++tp,++iter)
*tp=*iter;
cout<<"复制完成"<<endl;
//释放内存
delete [] p;
return 0;
}
编译时没有任何错误提示,但执行显示结果后,并没有出现“按任何键结束”字样,如下图:
经过调试,显示是在最后释放堆内存时错误,如下图:
对于这一点不明白,指点!!!
------解决思路----------------------
int *p=new int(ivec.size()); //这里的小括号要改成中括号
------解决思路----------------------
int *p = new int(10); // 给p分配一个int的空间,该int初始化为10,cout << *p 可以验证
int *p = new int(10); // 给p分配10个int的空间
------解决思路----------------------
初始化失败