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

数组问题

tfg0116 发布于 2008-10-14 09:19, 547 次点击
[qq]147178267[/qq]c++ primer 第四版 习题4.28
编写程序从标准输入设备读入的元素数据建立一个int型vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素复制给新数组。
小弟的程序是这样的,但是运行后会有下面的错误:Debug Assertion Failed!请高手指点。
    #include<iostream>
         #include<vector>
         using namespace std;
         int main()
       {
         vector<int> ivec;
    int ival;
    cout<<"Enter numbers:"<<endl;
    cin>>ival;
    while(ival != -1)
    {
        ivec.push_back(ival);
        cin>>ival;
    }
    int *pi = new int[ivec.size()];
    for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++, pi++ )
    {
        *pi = *iter;
        cout<<*pi<<'\t';
    }
    delete [] pi;
    return 0;
}
但是此程序如果没有释放内存那条语句就没有出错现象,为什么呢?还有如果重新定义一个指针并把原指针赋值给它也不会有错,不明白为什么
#include<iostream>
         #include<vector>
         using namespace std;
         int main()
       {
         vector<int> ivec;
    int ival;
    cout<<"Enter numbers:"<<endl;
    cin>>ival;
    while(ival != -1)
    {
        ivec.push_back(ival);
        cin>>ival;
    }
    int *pi = new int[ivec.size()];
         int *pi2 = pi;
    for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++, pi2++ )
    {
        *pi2 = *iter;
        cout<<*pi2<<'\t';
    }
    delete [] pi;
    return 0;
}
1 回复
#2
sunkaidong2008-10-14 10:21
pi++你让指针下移了,那么它不在是指向动态数组的开始位置,所以逻辑上错了
1