Hallo Community,
Folgendes Problem - Sobald ich ein dynamisches Array in der Funktion "ein" mit werten Fülle spinnt der Destruktor (~zweidim) in der Funktion ... Wo ist der Fehler?
Folgendes Problem - Sobald ich ein dynamisches Array in der Funktion "ein" mit werten Fülle spinnt der Destruktor (~zweidim) in der Funktion ... Wo ist der Fehler?
Code:
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
class zweidim
{
private:
double **d;
size_t ax, ay;
public:
zweidim(int Zeilen=1, int Spalten=1)
{
ax = Zeilen;
ay = Spalten;
if(ax>0&&ay>0)
{
d = new double*[ax];
for(int co=0; co<ax; co++)
{
d[co] = new double[ay];
}
for(int i=0;i<ax;i++)
{
for(int n=0;n<ay;n++)
{
d[i][n]=0.0;
}
}
}
else
{
cout<<"Falsche Eingabe "<<ax<<","<<ay<<"\n";
d = NULL;
}
}
double* operator[] (int ax)
{
return & d[ax][ay];
}
~zweidim()
{
int i,n;
for (i = 0; i < this->ax; i++)
{
delete [] d[i];
}
delete [] d;
}
double summe(size_t ax0=0, size_t ax1=0,size_t ay0=0,size_t ay1=0)
{
double summe=0;
double temp;
//test ob ax/y0 > ax/y1
if(ax0>ax1)
{
temp=ax0;
ax0=ax1;
ax1=temp;
}
if(ay0>ay1)
{
temp=ay0;
ay0=ay1;
ay1=temp;
}
//test ende
for(int i=0;i<ax1;i++)
{
for(int n=0;n<ay1;n++)
{
summe=summe+d[i][n];
}
}
return summe;
}
//Rückgabe von ax
size_t get_ax()
{
return this->ax;
}
//Rückgabe von ay
size_t get_ay()
{
return this->ay;
}
//Wert an Position x,y setzen
void set(size_t ax=0, size_t ay=0, double wert=0.0)
{
if(d!=NULL && ax<this->ax && ay<this->ay)
{
cout<<"Es wurde "<<wert<<" an Position "<<ax<<","<<ay<<" eingefeugt\n";
d[ax][ay]=wert;
}
else
{
cout<<"Wert konnte nicht gesetzte werden, objekt nicht existent oder Position oberhalb des Arrays\n";
}
}
//Wert holen // Anzeigen
double get(size_t ax=0, size_t ay=0)
{
if(ax>this->ax || ay>this->ay)
{
cout<<"Unzulässige Werte x y \n";
return 0;
}else
{
return d[ax][ay];
}
}
//Anzeigen Aller Elemente
void show(size_t ax0=0, size_t ax1=0, size_t ay0=0, size_t ay1=0)
{
//test auf 0>1 und auflösen bei fehler
int temp;
if(ax0>ax1)
{
temp=ax0;
ax0=ax1;
ax1=temp;
}
if(ay0>ay1)
{
temp=ay0;
ay0=ay1;
ay1=temp;
}//test ende
//Ausgabe Schleife
for(int i=0;i<ax1;i++)
{
for(int n=0;n<ay1;n++)
{
cout<<d[i][n]<<"\t";
}
cout<<"\n";
}
}//Ende Show
void ein(size_t ax0=0, size_t ax1=0, size_t ay0=0, size_t ay1=0)
{
double wert=0;
//test auf 0>1 und auflösen bei fehler
int temp;
if(ax0>ax1)
{
temp=ax0;
ax0=ax1;
ax1=temp;
}
if(ay0>ay1)
{
temp=ay0;
ay0=ay1;
ay1=temp;
}//test ende
for(int i=0;i<ax1;i++)
{
for(int n=0;n<ay1;n++)
{
cout<<"Eingabe "<<i<<","<<n;
cin>>wert;
d[i][n]=wert;
cout<<"\n";
}
cout<<"\n";
}
/*do {
cout<<"d = "; cin>>d
if(cin.eof()) break;
if(cin.fail() || (cin.peek() != '\n')){
cin.clear(); cin.ignore(INT_MAX,'\n');
continue;
}
break;
} while(true);
*/
}
};
int main()
{
zweidim arr(3,3);
cout<<"Ax="<<arr.get_ax()<<"\t Ay="<<arr.get_ay()<<"\n";
arr.set(1,2,20);
cout<<"Summe = "<<arr.summe(1,3,1,3)<<"\n";
arr.ein(1,3,1,3);
arr.show(1,3,1,3);
arr.~zweidim();
cin.get();
return 0;
}
Zuletzt bearbeitet: