我正在编写一个从给定格式的数据文件中读取的应用程序。在文件中,我动态创建了一个指向矢量对象的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;
行,后者打印了。
如果您没有猜到:
tempTestString
和ACCEL
- 字符串对象
sstream
- stringstream对象
array
- 动态内存中的2D结构数组
vectorName
- 指向vector对象的指针,array
附录:
因此,在回应一些评论时,这里是代码的其他部分,其中创建了所有变量:
阵列
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的值最高可达20000
答案 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是巧合的话。