Dynamisches 3D Array
-
Es gibt beim löschen des Arrays ein Problem.
Wärend der Laufzeik kommt folgene fehlermeldung:
Debug Error!
Program:...
HEAP CORRUPTION DETECTED: after Normal block (#154) at 0x00336528.
CRT detected that application wrote to memory after end of heap buffer.Beim druck auf wiederholen löst der folgenden haltepunkt aus:
for(int i=0;i<=Daten.a;i++) { for(int j=0; j<=Daten.b;j++) { delete[] Karte[i][j]; } delete[] Karte[i]; ///<-- HIER HALTEPUNKT } delete[] Karte;
-
Deine Schleifen laufen zu weit.
Als Schuss ins blaue würde ich schätzen, dass es
for(int i=0;i<Daten.a;i++) { for(int j=0; j<Daten.b;j++) {heissen muss.
worum benutzt eigentlich niemand std::vector?

-
otze schrieb:
worum benutzt eigentlich niemand std::vector?

Als Übung sicher nicht schlecht das mal gemacht/verstanden zu haben. Aber ich hoffe er benutzt das nicht "produktiv".. ^^
-
Hallo
otze schrieb:
worum benutzt eigentlich niemand std::vector?

Ich verstehe es auch nicht...
chrische
-
Weil selber machen immernoch am spannendsten ist?
-
ich habe noch nie von vector gehört geschweige denn kenne ich mit damit aus^^
Daher das.
und an dem gleich liegt es nicht habe das schon geändert. Das fängt schon bei i=0 an den haltepunkt auszulösen.
-
Matyr schrieb:
ich habe noch nie von vector gehört geschweige denn kenne ich mit damit aus^^
Daher das.
und an dem gleich liegt es nicht habe das schon geändert. Das fängt schon bei i=0 an den haltepunkt auszulösen.
Dann zeig mal den ganzen Code.
-
Ich bin anfänger und weiß das das nicht schön ist oder guter stiel.
Sicher auch einige fehler drin.// Auslesen Klasse.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include <string> #include <iostream> #include <windows.h> #include <sstream> #include <fstream> #include <cstring> #include <typeinfo> #include <stdlib.h> #include <math.h> #include <stdexcept> #include <io.h> #include <fcntl.h> using namespace std; class Map { private: struct gro { int a; int b; int c; }Daten; char* my_null; char*** Karte; fstream Datei; public: Map(); ~Map(); void groese(); char *** init(); void set(int); template<class A,class B> void convert(A&,B&); }; Map::Map() { Datei.open("Info.txt"); Karte=init(); } Map::~Map() { Datei.close(); for(int i=0;i<=Daten.a;i++) { for(int j=0; j<=Daten.b;j++) { delete[] Karte[i][j]; } delete[] Karte[i]; } delete[] Karte; } char *** Map::init() { groese(); Karte = new char**[Daten.a]; // sternchen dahinter for(int i=0;i<=Daten.a;i++) { Karte[i] = new char*[Daten.b]; }// sternchen dahinter, und nicht dereferenzieren for(int i=0;i<=Daten.a;i++) { for(int j=0;j<=Daten.b;j++) { Karte[i][j] = new char[Daten.c]; } } return Karte; } void Map::groese() { string tmp; getline(this->Datei,tmp); cout<<tmp<<"\n"; convert(tmp,this->Daten.a); if(Daten.a<=0){Daten.a=2;} getline(this->Datei,tmp); cout<<tmp<<"\n"; convert(tmp,this->Daten.b); if(Daten.b<=0){Daten.b=2;} getline(this->Datei,tmp); cout<<tmp<<"\n"; convert(tmp,this->Daten.c); if(Daten.c<=0){Daten.c=2;} cout<<"a: "<<this->Daten.a<<" b: "<<this->Daten.b<<" c: "<<this->Daten.c; } void Map::set(int data) { } template<class A, class B> void Map::convert(A& input, B &output) { /// Stringstream http://cplus.kompf.de/artikel/stream4.html stringstream ss; ss << input; ss >> output; if(!ss.eof()) { cout<<" KONVERTIREUNG FEHLGESCHLAGEN"; } } int main(int argc, _TCHAR* argv[]) { Map objekt; system("Pause"); }
-
Ein Array aus n Elementen hat nur n Elemente. Und wir fangen mit dem Element Nr. 0 an.
-
habe das gleich beim löschen weg gemacht klappt trozdem nicht.
der löst den error halt schon bei i=0 aus.
-
Falls du einen Fehler machst, erwarte nicht, dass das Programm richtet funktioniert, bevor du ihn an allen Stellen beseitigt hast, wo er auftritt.