Почему эта программа сообщает мне, что передан неверный параметр? - PullRequest
0 голосов
/ 04 февраля 2019

Честно говоря, я даже не знаю, что я пытаюсь сделать сейчас.Но я не могу идти дальше, пока не получу эту функцию, и она каждый раз выдает это исключение, что не так?Исключение составляет «Необработанное исключение в 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 Ответ

0 голосов
/ 04 февраля 2019

Когда программа запускается, вы создаете объекты:

Kinematic kin;
StreeringOutput steering;

Это называется default-initialization , т.е. все члены инициализируются значением default ,Для 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
...