Probleme mit fstream
-
Hallo alle zusammen. Ich (Anfänger im Programmieren) habe ein Problem mit fstreams. Ich benutze MS Visual Studio 2005.
Also folgende Situation:
Ich möchte aus einer .txt-Datei eine Tabelle in ein Array laden. Die Tabelle besteht aus 87 Spalten und 3000 Zeilen. Die Werte sind einfache Zahlen (ohne Nachkommastelle und ca.<4000). Die Spalten sind getrennt durch ein Leerzeichen.So nun zu meinem Problem:
Mit dem nachstehenden Code bekomme ich einen "stack overflow".
Setzte ich const int spalten = 86 steht an jeder Stelle der ausgegebene .txt-Datei die Zahl: -858993460.
Setzte ich const in spalten = 85 erhalte ich eine Tabelle in der .txt-Datei mit einen entsprechendem Versatz der Spalten (alles um 2 Spalten verschoben).
Wo liegt denn jetzt ein Fehler vor?Der Code:
#include <iostream> #include <fstream> #include <stdlib.h> #include <stdio.h> #include <string.h> using namespace std; int main(int argc, char **argv) { const int spalten=87; const int zeilen=3000; int matrix[spalten][zeilen]; ifstream fileInput; ofstream fileOutput; fileInput.open("C:\\AmpMat5000_B0R.txt"); //einzuladende Tabelle fileOutput.open("C:\\testfuerofstream.txt"); // auszugebende Tabelle for (int i=0; i<zeilen; i++) { for (int k=0; k<spalten; k++) { fileInput >> (matrix[k][i]); } } //fileInput.close(); for (int i=0; i<zeilen; i++) { for (int k=0; k<spalten; k++) { //cout << matrix[k][i] << " "; fileOutput << matrix[k][i] << " "; } fileOutput << endl; //cout << endl; } fileInput.close(); fileOutput.close(); cout << endl; system("PAUSE"); return 0; }
-
der stackoverflow kommt wahrscheinlich von dem großen array. machs mit new oder std::vector
-
also das array im heap initialisieren? hatte ich mir auch schon gedacht. jedoch noch nicht probiert. werde ich nachher mal machen.
-
wenn das array im heap geladen wird, ist immer noch ein fehler vorhanden.
-
xchrisx schrieb:
wenn das array im heap geladen wird, ist immer noch ein fehler vorhanden.
Ein Fehler oder derselbe Fehler?
-
Eine einfache Matrix-Implementierung, bei der die Daten auf dem Heap liegen, findest Du hier.
Gruß
Werner
-
LordJaxom schrieb:
xchrisx schrieb:
wenn das array im heap geladen wird, ist immer noch ein fehler vorhanden.
Ein Fehler oder derselbe Fehler?
ein anderer:
First-chance exception at 0x104c2315 (msvcp80d.dll) in testings.exe: 0xC0000005: Access violation writing location 0x009fa000.
Unhandled exception at 0x104c2315 (msvcp80d.dll) in testings.exe: 0xC0000005: Access violation writing location 0x009fa000.
-
Dann debugge doch einfach den Code und schau dir an wo es knallt (auch wenn die Fehlerursache meist vorher liegt).
-
so ich habe meinen Fehler gefunden.
es klappt wenn ich das array mit "new" im heap alloziere.
ich hatte nur das array in meiner klasse(wovon ich dann das objekt im heap alloziert heap) zu klein gewählt ([85][3000] anstatt [87][3000])
aber vielen dank für eure mithilfe.
-
#include <iostream> #include <fstream> // #include <cstdlib> // #include <cstdio> // #include <cstring>und
// std::system("PAUSE"); /* falls nötig std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); */ std::cin.get();