3

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

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;andcout << "position2" << endl;行和后面的打印。

如果你没有猜到:

tempTestStringACCEL- 字符串对象

sstream- 字符串流对象

array- 动态内存中的二维结构数组

vectorName- 指向向量对象的指针,指向的结构成员array

附录:

因此,作为对一些评论的回应,这里是代码的另一部分,其中创建了所有变量:

大批

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

结构名称

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

tempDim1 和 tempDim2 分别const ints为 2 和 3。pushBack 的值最大为 20000

4

2 回答 2

3

尝试纠正这一点:

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

=>

array = new structName* [tempDim1];
for(int i = 0; i < tempDim1; i++){
    array[i] = new structName [tempDim2];
}
于 2013-02-20T04:00:40.270 回答
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 巧合相同。

于 2013-02-20T04:06:36.680 回答