vector.push_back

时间:2013-02-20 03:40:00

标签: c++ vector push-back

我正在编写一个从给定格式的数据文件中读取的应用程序。在文件中,我动态创建了一个指向矢量对象的2D数组。基本上,它读取文件,当它找到给定的字符串模式时,它会停止并读取

while(getline(inputFile,tempTestString)){
        // first for ACCEL
        if(string::npos != tempTestString.find(ACCEL)){
            sstream.str(tempTestString);
            sstream >> pushBack;
            cout << "position 1" << endl;
            array[tempDim1][tempDim2].vectorName->push_back(pushBack);
            cout << "position 2" << endl;
            break;
        }
}

现在,pushBack是一个很大的数字,可能高达20000,但它在不同文件之间有所不同。

这段代码的问题是我没有得到任何运行时错误,甚至抛出任何异常,我试着抓住它们。程序简单完成!可以肯定的是,我添加了cout << "position1" << endl;cout << "position2" << endl;行,后者打印了。

如果您没有猜到:

tempTestStringACCEL - 字符串对象

sstream - stringstream对象

array - 动态内存中的2D结构数组

vectorName - 指向vector对象的指针,array

指向的struct成员

附录:

因此,在回应一些评论时,这里是代码的其他部分,其中创建了所有变量:

阵列

array = new structName* [tempDim1];
for(int i = 0; i < tempDim2; i++){
    array[i] = new structName [tempDim2];
}

structName

struct structName{
    vector<double>* vectorName;
    vector<double>* vectorName1;
    vector<double>* vectorName2;
 };

tempDim1和tempDim2都是const ints,值分别为2和3。 pushBack的值最高可达200​​00

2 个答案:

答案 0 :(得分:3)

尝试纠正此问题:

array = new structName* [tempDim1];
for(int i = 0; i < tempDim2; i++){
    array[i] = new structName [tempDim2];
}

=&GT;

array = new structName* [tempDim1];
for(int i = 0; i < tempDim1; i++){
    array[i] = new structName [tempDim2];
}

答案 1 :(得分:0)

您在初始化中使用了错误的元素数。

array = new structName* [tempDim1];
for(int i = 0; i < tempDim2; i++){
    array[i] = new structName [tempDim2];
}

i < tempDim2错了;该数组有tempDim1元素。

我不知道这是否是 问题,但它是 问题。如果tempDim1> tempDim2然后array []的一些元素将被取消初始化。 (如果是相反的话,你就会破坏记忆。)唯一可行的方法是,如果tempDim1和tempDim2是巧合的话。