probleme beim einlesen von textdateien
-
hallo!
vielleicht erinnern sich einige, dass ich vor kurzem probs hatte und hier postete; naja, die probs sollten eigentlich gegessen sein, wenn der untenstehende Code funktionieren würde... was er aber nicht macht.
es geht darum, dass ich zuerst mir eine matrix initialisiere (deren größe nur in einzelnen programmaufrufen konstnt ist).
anschließend bastele ich mir den dateinamen von textdateien zusammen, aus denen ich die spalten der matrix füttere.... nichtsdestoweniger stürzt mein prog dauernd ab.ich hab mal den experimental code "sizeof(data)/sizeof(data[0][0]) eingegeben, um zu sehen, wie groß meine Matrix ist, und das ergebnis war 1... was bei den zahlen, die ich für die einzelnen dimensionen hernehm nicht sein kann... naja, hier ist mal code, ich hoffe einer von euch kann mir helfen:
int** data; data=new int*[langarray]; count=0; for (count=0; count<langarray; count++){ data[count]=new int[langkanal];} kanalcount=0; int langcount=0; for (kanalcount=0; kanalcount<langarray; kanalcount++){ char str[40]; strcpy(str, "D:\\bayesfamos\\kanaele\\"); char str2[2]; itoa(kanal[kanalcount], str2, 10); strcat(str, str2); strcat(str, ".txt"); ifstream myfile3; int tiefe=0; myfile3.open(str); if(myfile3.is_open()){ while(! myfile3.eof()){ myfile3 >> data[kanalcount][tiefe]; tiefe++; } myfile3.close(); } }
-
Du inkrementierst den Index 'tiefe' ohne Rücksicht auf ein eventuell nahendes Ende des Arrays 'data[kanalcount]'. Beim Überschreiben des Arrays kann es dann durchaus zum Absturz kommen. Ich habe aus Deinem Code alles entfernt, was stört, einen ostringstream für den Zusammenbau des Namens eingebaut und auf die Array-Länge Rücksicht genommen - dann sieht das so aus:
int** data = new int*[langarray]; for (int count=0; count<langarray; ++count){ data[count]=new int[langkanal]; } for (int kanalcount=0; kanalcount<langarray; ++kanalcount){ ostringstream name; // erfordert #include <sstream> name << "D:\\bayesfamos\\kanaele\\" << kanal[kanalcount] << ".txt"; ifstream myfile3(name.str().c_str()); if(myfile3.is_open()){ for( int tiefe = 0; tiefe < langkanal && myfile3 >> data[kanalcount][tiefe]; ++tiefe ) ; } if( !myfile3 ) cerr << "Fehler beim Lesen aus '" << name.str() << "'" << endl; }probier's mal aus.
ein genervter mathematike schrieb:
ich hab mal den experimental code "sizeof(data)/sizeof(data[0][0]) eingegeben, ...
sizeof(data) liefert die Größe des Zeigers - und die ist i.A. 4 Byte - so lang wie ein int.