Dynamisches 3D Array
-
Wie du findest meinen Post nicht?
Ich habe dir doch den Link gepostet vorhin. Und der letzte ist es.Das was du machst geht so nicht. Schau einfach bei dem anderen Thread, dort steht die Lösung.
-
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.