Programmcrash
-
Hallo zusammen.
Ich schrieb folgendes Programm:
#include<iostream>
#include "Bilddaten.h"using namespace std;
int main()
{
Bilddaten Objekt;
Objekt.Eingabe();
Objekt.Ausgabe1();
Objekt.Ausgabe2();system("pause"); return 0;
}
//Hadder
#pragma once
#include <iostream>using namespace std;
#ifndef Bilddaten_H
#define Bilddaten_Hclass Bilddaten
{
public:
// default constructor
Bilddaten();// overload constructor Bilddaten(int, int); // destructor ~Bilddaten(); //accesor function void Eingabe(); int getIndex(int x, int y, int H); int getX(int i, int H); int getY(int i, int H); void Ausgabe1(); void Ausgabe2();
private:
int H;
int V;
int C = H * V;
int* Field = new int[C]; //erzeugt ein dynamisches Feld
int counter = 0;
int x, y, i;
};#endif
#include "Bilddaten.h"
Bilddaten::Bilddaten()
{
int H = 0;
int V = 0;
}Bilddaten::Bilddaten(int neuH, int neuV)
{
int H = neuH;
int V = neuV;
}Bilddaten::~Bilddaten()
{
delete[] Field;
}void Bilddaten::Eingabe()
{
cout << "Breite eingeben: ";
cin >> H;
cout << endl;
cout << "Hoehe eingeben: ";
cin >> V;
cout << endl;
}int Bilddaten::getIndex(int x, int y, int H)
{
int i;
i = y * H + x;
return i;
}int Bilddaten::getX(int i, int H)
{
int x = i % H;
return x;
}int Bilddaten::getY(int i, int H)
{
int y = i / H;
return y;
}void Bilddaten::Ausgabe1()
{
for (int y = 0;y < V;y++)
{
for (int x = 0;x < H;x++)
{
cout << " (" << y << " , " << x << ") " << counter;
Field[getIndex(x, y, H)] = counter++;
}
cout << endl;
}
cout << endl;
}void Bilddaten::Ausgabe2()
{
for (int i = 0;i < C;i++)
{
x = getX(i, H);
y = getY(i, H);
cout << Field[i] << "-->" << x << "," << y << "\t";
}
cout << endl;
cout << endl;
cout << H << " " << V << " " << x << " " << y << " " << i << endl;
}Bei mir craschat das Programm sobald ich 2 Werte eingegeben habe. Ich vermute das Problem liegt in der Funktion Ausgabe2(), da ich dort ein dynamisches Array verwende, bin aber nicht sicher. Hat jemand eine Idee woran es liegen könnte?
-
int* Field = new int[C]; //erzeugt ein dynamisches Feld
erzeugt irgendeinen Müll, da keine deiner Variablen initialisiert ist. In deinen Konstruktoren weist du lokalen Variablen einen Wert zu, der anschließend gleich wieder vergessen wird.Dynamische Arrays heißen in C++ std::vector.
-
Auch das restliche Programm sieht falsch aus. Nimmst du an, die Große des Arrayas ändere sich, wenn H und V eingelesen werden? Warum gibt es Membervariablen x, y, i? Warum übergibst du den get-Funktionen H? Das ist als Member doch bekannt.
-
Nice!!!
Danke für die Hilfe
-
Solche Fehler kann man übrigens sehr leicht mit einem Debugger einkreisen. Der zeigt einem die genaue Stelle an wo man Quatsch macht und du hättest damit sofort gesehen, wenn z.B. an der Stelle eine Variable nicht initialisiert ist. Also lerne bitte mit so einem Tool umzugehen!