找不到我的错误:为RtlValidateHeap指定的地址无效

时间:2018-04-05 14:38:03

标签: c++ memory-management destructor

我不知道为什么我的代码不能工作。没有析构函数它工作正常但是如果我尝试删除堆上分配的数组我的程序停止并说

  

为RtlValidateHeap指定的地址无效

我已经搜索了我的问题,但找不到可以帮助我的解决方案。

这是我的代码:

文件:Vektor.h

class Vektor {
private:
    int dimension;
    int* feld;
public:
    Vektor(int dim=0);
    int getAt(int idx); // Getter-Funktion für Werte des Vektors
    // int getDimension(); // Getter-Funktion für Dimension
    Vektor addiereZu(Vektor v); // Addition zweier Vektoren
    Vektor multipliziereMit(int z); // Multiplikation von Vektor mit Zahl
    void ausgeben(); // Ausgabe am Bildschirm (Format ( 0 1 2 ... ) )
        int summiere(); // Vektor-Summation
        void einlesen(); // Werte einlesen
        ~Vektor();
    };

文件:Vektor.cpp

#include "Vektor.h"
#include "Funktionen.h"
#include <iostream>
using namespace Funktionen;
using namespace std;

Vektor::Vektor(int dim) {
    feld = NULL;
    // Todo für später:
    if (dim <= 0)
        dim = 0;

    dimension = dim;

    if (dim > 0)
        feld = new int [dimension];

    // Feld mit Werten initialisieren
    for (int i=0; i<dimension; i++)
        feld[i] = 0;
}

int Vektor::getAt(int idx) {
    if (idx >=0 && idx < dimension)
        return feld[idx];
    //else {
        // Fehlerausgabe
        cout << "Vektordimension überschritten.\n";
        // default-Wert zurückgeben
        return 0;
    //}
}

Vektor Vektor::addiereZu(Vektor v) {
    Vektor ergebnis(dimension);
    for (int i = 0; i < dimension; i++) {
        ergebnis.feld[i] = feld[i] + v.feld[i];
    }
    return ergebnis;
}

Vektor Vektor::multipliziereMit(int z) {
    Vektor ergebnis(dimension);
    for (int i = 0; i < dimension; i++) {
        ergebnis.feld[i] = feld[i] * z;
    }
    return ergebnis;
}

void Vektor::ausgeben() {
    // Vektor im Format "( 0 1 2 ... )" ausgeben.
    cout << "( ";
    for (int i = 0; i < dimension; i++) {
        cout << feld[i];
        cout << " ";
    }
    cout << ")";
}

int Vektor::summiere() {
    // Summieren der einzelnen Werte des Vektors
    int summe = 0;
    for (int i = 0; i < dimension; i++) {
        summe += feld[i];
    }
    return summe;
}

void Vektor::einlesen() {
    // Einzelne Werte von der Tastatur einlesen
    for (int i = 0; i < dimension; i++) {
        cout << "Wert für Stelle " << i << ": ";
        // Wert abfragen
        feld[i] = intEingabe(cin);
    }
}

Vektor::~Vektor()
{
    if (dimension > 0)
        delete[] feld; --> Programm stops right here!
}

0 个答案:

没有答案