【发布时间】:2013-02-20 03:40:00
【问题描述】:
我正在编写一个从给定格式的数据文件中读取数据的应用程序。在文件中,我动态地创建了一个指向向量对象的二维指针数组。基本上,它会读取文件,当它找到给定的字符串模式时,它会停止并读取
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; 行以及后面的打印。
如果你没有猜到:
tempTestString 和 ACCEL - 字符串对象
sstream - 字符串流对象
array - 动态内存中的二维结构数组
vectorName - 指向向量对象的指针,array 指向的结构成员
附录:
因此,针对某些 cmets,这里是代码的另一部分,其中创建了所有变量:
数组
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
【问题讨论】:
-
那么像
cout << "position 1" << endl;这样的语句没有产生任何输出? -
cout
-
确保 array[tempDim1][tempDim2].vectorName 有效。
-
这引出了 Grigoriy 刚刚指出的问题? everything 指出
array[tempDim1][tempDim2].vectorName->push_back(pushBack);是问题所在,除了简短的描述之外,没有我们对此一无所知。既然您无论如何都在打印cout,那么为了让您的仪器更加清晰,如何转储所有这些索引和pushBack的值。 -
我稍后会发布一个附录