Hallo :) Ich bin ein sehr neuer Programmierer und kann nicht herausfinden, warum ich diesen Fehler habe. Um zu erklären, wenn ich das Programm auszuführen (Code unten) mit unterschiedlichen Werten in der LinieProgramm kompiliert, aber gelegentlich stürzt unter Berufung auf Grund 255 (CodeBlocks)
array2D *a = new array2D(320,240);
(beispielsweise Ändern 320 und 240 bis 32 und 24) das Programm abstürzt entweder irgendwann nach der getSize Funktion ausführt oder nach Ausführung der prtValue-Funktion (häufiger die ehemalige). Wenn ich den Code jedoch unabhängig von den Werten in der obigen Zeile erstelle, gibt er 0 Fehler und 0 Warnungen zurück.
Ich habe den Code auf cpp.sh getestet und diese Website ändert die Werte genau und gibt jedes Mal das korrekte/vollständige Ergebnis aus, also frage ich mich, ob dies ein CodeBlocks/mein Hardware-Problem ist? Der Debugger gibt auch nur ein Problem zurück, und es scheint mit der setValue-Funktion zu sein, aber mein untrainiertes Auge kann nicht sagen, was falsch ist.
Entschuldigung für die Ignoranz. Auch hier habe ich fast keine Erfahrung und bin irgendwie ratlos. Vielen Dank im Voraus für jegliche Hilfe, die Sie möglicherweise leisten können.
#include <iostream>
using namespace std;
class array2D
{
protected:
int xRes;
int yRes;
float ** xtable;
public:
array2D (int xResolution, int yResolution);
void getSize(int &xResolution, int &yResolution);
void setValue(int x,int y,float val);
float getValue(int x,int y);
~array2D();
};
array2D::array2D(int xResolution, int yResolution)
{
xRes=xResolution;
yRes=yResolution;
xtable = new float*[xResolution];
for(int i=0;i < xResolution;i++)
{
xtable[i] = new float[yResolution];
}
for(int i=0;i < xRes;i++)
{
for(int j=0;j < yRes;j++)
{
xtable[i][j]=0;
}
}
}
void array2D::getSize(int &xResolution, int &yResolution)
{
xResolution=xRes;
yResolution=yRes;
cout << "Size of Array (rows, columns): " << xResolution << ", " << yResolution << endl;
}
void array2D::setValue(int x,int y,float val)
{
xtable[x][y] = val;
}
float array2D::getValue(int x,int y)
{
return xtable[x][y];
}
array2D::~array2D(){
cout << "Destructing array" << endl;
}
int main()
{
array2D *a = new array2D(32,24);
int xRes, yRes;
a->getSize(xRes,yRes);
for(int i=0;i < yRes;i++)
{
for(int j=0;j < xRes;j++)
{
a->setValue(i,j,100.0);
}
}
for(int j=0;j < xRes;j++)
{
for(int i=0;i < yRes;i++)
{
cout << a->getValue(i,j) << " ";
}
cout << endl;
}
a->~array2D();
}
Manuell einen Destruktor aufrufen ist fast immer eine schlechte Idee. Ich denke du meinst "delete ein" genau am Ende dort. – user4581301
Lesefassung [Was ist die Dreiregel?] (Https://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) Es wird später viel Verwirrung ersparen. – user4581301
@ user4581301 danke, dass du mich informiert hast - ich werde diesen Teil entfernen und studieren! –