注册 登录
编程论坛 C++教室

问题求助!

woaitudi 发布于 2008-04-10 19:20, 439 次点击
//...........从标准输入设备读入数据建立int型vector对象,然后动态创建一个与该
//...........vector对象大小一致的数组,把vector对象的所有复制给新数组
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> ivec;
int i;
//读入数据建立int型vector对象
cout<<"enter i to vector(Ctrl+Z to end):"<<endl;
while(cin>>i)
{ivec.push_back(i);
}
//动态创建一个与vector对象大小一致的数组
int *p=new int[ivec.size()];
//int *pia=p;                                     ............此行的//去掉
//把vector对象的所有复制给新数组
for(vector<int>::iterator index=ivec.begin();index!=ivec.end();++index,++p)      ........++p改为++pia
{*p=*index;                                                                     .........改为*pia=*index;
cout<<*p<<" ";                                    ............改为cout<<*pia<<" ";
}
delete [] p;
return 0;
}
这个程序在运行时会出现错误,但是将它改成右面的情况,运行时就不会出现错误。总的来说,我就是加了一个指针,
可是加和不加不是一样的吗?请高手解释一下!谢谢!
4 回复
#2
sunkaidong2008-04-10 19:36
p 是当数组用的..你后面又下移了.当你删除的时候它不再是数组首地址了...
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> ivec;
    int i;

    cout<<"enter i to vector(Ctrl+Z to end):"<<endl;
    while(cin>>i&&i!=0)
    {
        ivec.push_back(i);
    }
     
    int *p=new int[ivec.size()];

    for(vector<int>::iterator index=ivec.begin();index!=ivec.end();++index,++p)      
    {
        *p=*index;                                                                    
        cout<<*p<<" ";                                   
    }
    p=p-ivec.size();
    delete [] p;
    return 0;
}
#3
yijing212008-04-10 20:03
楼上是高人  一眼看出内存管理上的问题。
#4
woaitudi2008-04-11 07:45
哦,明白了!谢谢!
#5
woaitudi2008-04-11 07:46
哦,明白了!谢谢!
1