vector.push_back

Я пишу приложение, которое читает из файлов данных определенного формата. В этом файле я динамически создал двумерный массив указателей на векторные объекты. По сути, он читает файл, и когда он находит заданный шаблон строки, он останавливается и читает

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

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];
}
3

Другие решения

Вы используете неправильное количество элементов в вашей инициализации.

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

i < tempDim2 неправильно; массив имеет элементы tempDim1.

Я не знаю, если это проблема, но это проблема. Если tempDim1> tempDim2, то некоторые элементы array [] будут неинициализированы. (И если все наоборот, вы портите память.) Единственный способ, которым это сработает, — это если совпадают временные значения tempDim1 и tempDim2.

0

По вопросам рекламы [email protected]