简体   繁体   中英

Why is this program telling me invalid parameter was passed?

Honestly I don't even know what I am trying to do as of now. But I can't go further until I get this function to work, and it throws that exception each time, what is going wrong? The exception is "Unhandled exception at 0x0F61CAB6 (ucrtbased.dll) in CS 330 19S, P1, Calvert, Program 1.exe: An invalid parameter was passed to a function that considers invalid parameters fatal"

#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;
}

When the program starts, you create the objects:

Kinematic kin;
StreeringOutput steering;

This is called default-initialization , ie all members are initialized to the default value . For vector , it is the empty state.

But update does these things:

// i and j can be as large as 99
k.position[i][j]
k.velocity[i][j]
steering.linear[i][j]

But position , etc. are empty! vector s cannot automatically grow to fit your needs. You are indexing out-of-bound , which is undefined behavior.

You should initialize the vectors properly to ensure there are actually 100 elements:

Kinematic kin;
kin.position.assign(100, vector<float>(100));
// same for others

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM