Lesen aus Datei und übergeben eine zwei-dimensionales array in C
Ich möchte, um eine Textdatei zu Lesen und setzen die Daten in ein 2 dimensionales array. Dieser code funktioniert für eine kleine text-Datei wie 0 1 1 1 0 1 1 0 1 1 1 1 aber gibt "segmentation fault", für einen großen text-Datei und 648x512 array. Was könnte das problem sein? Was könnte einen besseren code dafür?
Link zu einer großen txt-Datei:
http://mimoza.marmara.edu.tr/~omer.korcak/courses/CSE246%20-%20Spring2012/squares.txt
#include<stdio.h>
FILE *input;
int x=0, y=0, R=0, C=0,c=0;
int main()
{
input = fopen("squares.txt", "r");
C = 512;
R = 648;
int M[R][C];
for(x = 0; x < R; ++x ) {
for(y = 0; y < C; ++y ) {
fscanf( input, "%d", &c );
M[x][y]=c;
}
}
}
- Fügen Sie einen tag für die Sprache c oder c++ ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
weil man zu viel stack-Speicher. Main benötigen einen stack groß genug, um halten Sie M, die 512x648x(sizeof(int)). Angenommen, ein 4-byte int, das ist 1327104 bytes nur für eine variable. Je nach Ihrer Umgebung, das ist eine Menge. Wenn Sie mehr als ein wenig Speicher dynamisch allokiert es:
int M[] new int[K*R] oder int M[][] = new int[C][R] (gleiche diff, das erste ist tatsächlich einfacher, mit zu arbeiten)
Cheers
Wenn die array-Größe ist groß, zum Beispiel:
648x512, M[R][C]
verwendet alle Stapelspeicher des Programms, daher bekommen Sie einen segmentation fault.Versuchen, verwenden Sie ein dynamisches array statt und denken Sie daran, es zu veröffentlichen nach dem Gebrauch.