Haltepunkt bei programmausführung



  • Ich habe eine Klasse für mathematische Vektoren geschrieben

    #pragma once
    class CCMyVektor
    {
    private:
    	int dimension;
    	double vector[];
    public:
    	CCMyVektor(int dim)
    	{
    		dimension = dim;
    		vector[dim];
    	}
    
    	CCMyVektor(){}
    
    	int getdim()
    	{
    		return dimension;
    	}
    
    	void setVal(int i, double value)
    	{
    		vector[i] = value;
    	}
    
    	double getVal(int pos)
    	{
    		return vector[pos];
    	}
    
    	int length()
    	{
    		int cnt = 0;
    		for (int i = 0; i < dimension; i++)
    			cnt++;
    		return cnt;
    	}
    
    	~CCMyVektor()
    	{
    		delete[] vector;
    	}
    };
    

    main:

    #include <iostream>
    #include "CMyVektor.h"
    
    using namespace std;
    
    int main()
    {
    	int x = 6;
    	CCMyVektor *vec = new CCMyVektor(x);
    
    	cout << "Dimension: " << vec->getdim();
    	for (int i = 0; i < x; i++)
    	{
    		vec->setVal(i, (double)i+3);
    	}
    
    	cout << endl;
    
    	for (int i = 0; i < x; i++)
    	{
    		cout << vec->getVal(i) << " ";
    	}
    	cout << endl;
    	system("PAUSE");
    
    	return 0;
    }
    

    Manchmal wenn ich das Programm ausführe stürtzt es am ende ab und Visual studio gibt mir einen haltepunkt "vektor.exe hat einen Haltepunkt ausgelöst." aus.

    Das problem ist, dass es halt nur manchmal passiert, andere male führt das Programm ohne Fehler aus.

    Das gibt mir Windows aus, wenn ich die *.exe direkt starte:

    https://i.imgur.com/PQaPHY5.png

    Hoffe jemand kann mir bei dem problem helfen 👍



  • Schau dir die Zeilen mal genauer an:

    double vector[]; 
    ...
    vector[dim];
    ...
    return vector[pos];
    ...
    delete[] vector;
    

    Was ist vector (übrigens ein sehr schlechter Name) genau und wieviel Speicher steht dafür tatsächlich zur Verfügung? 3) ist noch undefiniertes Verhalten, 2) eine leere Anweisung und bei 4) kanns nur krachen (du hast eben keinen Speicher für vector angefordert).

    Ein schlechter Name ist es deshalb, da es den std::vector gibt, der eigentlich genau das macht, was du (fehlerhaft) nachprogrammieren möchtest.
    So könnte es aussehen:

    ...
    #include <vector>
    int main()
    {
        int x = 6;
        std::vector<double> vec(x);
    
        cout << "Dimension: " << vec.size();
        for (int i = 0; i < x; i++)
        {
            vec[i] = i+3;
        }
    
        cout << endl;
    
        for (int i = 0; i < x; i++)
        {
            cout << vec[i] << " ";
        }
    }
    

    Edit: i und x sollten auch jeweils ein size_t sein (wobei du natürlich x nicht speichern musst, der vector kennt seine Größe selber -> vec.size()).



  • Was bezweckst du mit Zeile 11 (vector[dim];)???

    Daß dein Programm manchmal (anscheinend) fehlerfrei ausgeführt wird, ist eher Zufall.
    Der Dialog gibt dir aber auch den Hinweis zum Debuggen (Retry -> Wiederholen) bzw. laß dein Programm von VS mal unter "Debug" ausführen.

    PS: Deine Funktion length() kann man auch kürzer schreiben (denn was soll der Unterschied zu getdim() sein?).

    Außerdem gibt es in der C++ Standard Library schon eine Klasse dafür: vector<T>



  • Ok danke hab es so gelöst:

    double* vector;
    ...
    vector = new double[dim];
    

Anmelden zum Antworten