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