Я пишу приложение, которое читает из файлов данных определенного формата. В этом файле я динамически создал двумерный массив указателей на векторные объекты. По сути, он читает файл, и когда он находит заданный шаблон строки, он останавливается и читает
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
— указатель на векторный объект, член структуры, на который указывает 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
Попробуйте исправить это:
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];
}
Вы используете неправильное количество элементов в вашей инициализации.
array = new structName* [tempDim1];
for(int i = 0; i < tempDim2; i++){
array[i] = new structName [tempDim2];
}
i < tempDim2
неправильно; массив имеет элементы tempDim1.
Я не знаю, если это проблема, но это проблема. Если tempDim1> tempDim2, то некоторые элементы array [] будут неинициализированы. (И если все наоборот, вы портите память.) Единственный способ, которым это сработает, — это если совпадают временные значения tempDim1 и tempDim2.