回 帖 发 新 帖 刷新版面

主题:[讨论]new创建动态数组出现的问题

include<iostream>
#include<string>
#include<vector>
using namespace std;

 int main() 
{
  vector<int> ivec;
  
  int dvec;

  cout<<"Enter number:(ctrl+z to end)"<<endl;

  while(cin>>dvec)

      ivec.push_back(dvec);

   int *tp = new int[ivec.size()];

   //int *tp=cp1;//去掉这句编译通过,运行就会出错

   for(vector<int>::iterator ix = ivec.begin();ix!=ivec.end();++ix,++tp)

   {

       *tp = *ix;
  
       cout<<*tp<<"  "; 

   }

   delete [] tp;

 system("pause");
 return 0;
}
   
出现如下错误:Debug Assertion failed
Expression:_crtIsValidHeappointer(puserdata)
但是在定义一个中间变量int *tp=cp1;就正常运行[/size]

回复列表 (共5个回复)

沙发

int* tp = new int[ivec.size()];
此间,更改了tp的值
delete[] tp;

板凳


 还是没理解,麻烦多讲一些这方面的知识,不胜感激。
size_t itel = 0;  

    for (vector<int>::iterator ix = ivec.begin();    

                      ix!= ivec.end(); ++ix, ++itel)  

        tp[itel] = *ix;  

    // 释放数组  

    delete [] tp;  

    return 0;  
这种情况下就是对的

3 楼


在使用的过程中,tp的值本来就要变呀

4 楼


下来仔细想了一下,现在终于明白了,非常感谢

5 楼


问题在于你最后那个delete....
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter, ++tp)  

改变了tp的地址,tp不再指向动态定义数组的最前端,因此释放空间的时候报错

我来回复

您尚未登录,请登录后再回复。点此登录或注册