Problem mit Strukturen, es werden andere Werte angezeigt als erwartet
-
Guten Tag,
ich habe mal wieder ein Problem, diesesmal poste ich gleich im richtigen Forum.
Eventuell ist dieses Problem eine Fortsetzung von
[url]http://www.c-plusplus.net/forum/viewtopic-var-t-is-142189.html [/url]In dem Beispielprogramm wird eine Struktur "statistics" initialisiert und mit Werten belegt. Anschließend wird die Struktur zweimal mit der gleichen Methode ausgegeben. Die Ausgaben unterscheiden sich deutlich.
Ich habe keine Ahnung, wo der Fehler liegt. Kann mir jemand die Lösung verraten oder den entscheidenen Tip geben?
Vielen Dank schonmal.

Auschnitt aus der Ausgabe:
...
(0,3) AV: 1 Min: 2 Max: 3 Num: 4
...
(0,5) AV: 1 Min: 2 Max: 3 Num: 4
...
-------------------------------------------
-------------------------------------------
...
(0,3) AV: 1 Min: 2 Max: 1 Num: 2
...
(0,5) AV: 3 Min: 4 Max: 1 Num: 2
...Analyser.h
//std c++ header #include <stdio.h> #include <stdlib.h> #include <iostream> //own header #include "FileManager.h" #ifndef Analyser_h #define Analyser_h typedef struct { int avDist; int minDist; int maxDist; int number; } Statistics; class Analyser{ public: ~Analyser(); Statistics** statistics; //inits the statistic variables void initStatistics(); void ausgabe(int i,int j); }; #endifAnalyser.cpp
//own header #include "Analyser.h" #ifndef Analyser_cpp #define Analyser_cpp // destructor ----------------------------------------------------- Analyser::~Analyser(){ if(statistics) delete statistics; } void Analyser::initStatistics(){ int anzA=9,nor=3; statistics=new Statistics*[anzA]; for (short i=0;i<anzA;i++){ statistics[i]=new Statistics[nor]; } for (int i=0;i<nor;i++) for (int j=0;j<anzA;j++){ statistics[i][j].avDist=1; statistics[i][j].minDist=2; statistics[i][j].maxDist=3; statistics[i][j].number=4; ausgabe(i,j); } cout <<"-------------------------------------------------------" <<endl; cout <<"-------------------------------------------------------" <<endl; for (int i=0;i<nor;i++) for (int j=0;j<anzA;j++){ ausgabe(i,j); } } void Analyser::ausgabe(int i,int j){ cout <<"("<<i<<","<<j<< ") " << " AV: " << statistics[i][j].avDist << " Min: " << statistics[i][j].minDist << " Max: " << statistics[i][j].maxDist << " Num: " << statistics[i][j].number << endl; } int main(int argc, char** argv) { Analyser a; a.initStatistics(); system("pause"); } #endif
-
Hallo,
for (int i=0;i<nor;i++) for (int j=0;j<anzA;j++){Hier müssen die Abbruchbedingungen, sprich nor und anzA vertauscht werden ;).
Gruß Caipi
-
[edit]
Danke Caipi

genauso klappt es.
-
Zwischen der Initialisierung der Statistics und der Belegung und Ausgabe ist 'anzA' und 'nor' vertauscht. Du schreibst und liest in nicht allokierten Speicher.
Im Übrigen löscht Du die einzelnen Statistics[nor]-Felder im Konstruktor nicht (Memory-Leak) und dem Analyser fehlt ein Copy-Konstruktor und Assignment-Operator. Falls Du sie nicht brauchst, so mache sie private.
Gruß
Werner