用vector给一个动态数组赋值出现问题
新建个vector对象,键盘输入赋值,然后动态申请个数组,用 之前vector给他赋值,代码如下
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> ivec;
int iva;
while(cin>> iva){
ivec.push_back(iva);
}
cout<<"the original data:\n";
for(vector<int>::size_type ind=0; ind != ivec.size();ind++){
cout<<ivec[ind]<<" ";
}
int *ptr=new int[ivec.size()];
int *ptr2=ptr;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++ptr2){
*ptr2=*it;
//cout<<*ptr;
//ptr++;
}
cout<<"\nvalue ptr by copying ivec\n";
/*for(vector<int>::size_type ind=0; ind != ivec.size();ind++){
cout<<ptr[ind]<<" ";
}*/
delete []ptr;
return 0;
}
如果没有int *ptr2=ptr;这条语句间接实现的话,程序就卡在那里不走了,vs2012下编译的,
求大神!!!!!
[解决办法]
int *ptr=new int[ivec.size()];
int *ptr2=ptr;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++ptr2){
*ptr2=*it; //这里的赋值操作,你把地址都改变了哦,而且是自己分配的地址
//这样后引起后面的释放出问题的
//cout<<*ptr;
//ptr++;
}
换这样试试:
int i= 0;
for(vector<int>::const_iterator it=ivec.begin(); it !=ivec.end(); ++it,++i)
ptr2[i] =*it
[解决办法]
应该是这样操作修改了你分配堆空间的首地址导致出现问题的吧!
不加 int *ptr2=ptr;
你直接用 ptr[i] = *it;
i++;
试试