Почему эта программа сообщает мне, что передан неверный параметр?
Честно говоря, я даже не знаю, что я пытаюсь сделать сейчас. Но я не могу идти дальше, пока не получу эту функцию, и она каждый раз выдает это исключение, что не так? Исключением является "Необработанное исключение в 0x0F61CAB6 (ucrtbased.dll) в CS 330 19S, P1, Calvert, Program 1.exe: недопустимый параметр был передан функции, которая считает недопустимые параметры фатальными"
#include<iostream>
#include<vector>
#include <fstream>
using namespace std;
struct Kinematic {
vector<vector<float>> position;
float orientation;
vector<vector<float>> velocity;
float rotation;
};
struct StreeringOutput {
vector<vector<float>> linear;
float angular;
};
void update(StreeringOutput steering, float time, Kinematic k)
{
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
k.position[i][j] += k.velocity[i][j] * time +
0.5*steering.linear[i][j] * time*time;
//the above command is where it throws the exception
k.velocity[i][j] += steering.linear[i][j] * time;
}
}
k.orientation += k.rotation*time + 0.5*steering.angular*time*time;
k.rotation = steering.angular*time;
}
int main()
{
int test;
Kinematic kin;
StreeringOutput steering;
float time = 0.0;
ofstream outfile;
outfile.open("Output.txt");
for (int i = 0; i < 100; i++)
{
update(steering, time, kin);
time += 0.5;
}
cin >> test;
return 0;
}
1 ответ
Когда программа запускается, вы создаете объекты:
Kinematic kin;
StreeringOutput steering;
Это называется default-initialization, т.е. все члены инициализируются значением по умолчанию. За vector
, это пустое состояние.
Но update
делает эти вещи:
// i and j can be as large as 99
k.position[i][j]
k.velocity[i][j]
steering.linear[i][j]
Но position
и т. д. пусты! vector
s не может автоматически расти в соответствии с вашими потребностями. Вы индексируете вне пределов, что является неопределенным поведением.
Вы должны правильно инициализировать векторы, чтобы обеспечить наличие 100 элементов:
Kinematic kin;
kin.position.assign(100, vector<float>(100));
// same for others