2017-03-06 3 views
0

ich bin test und tuning ein protokoll. Wenn ich den folgenden Code ausführe, stürzt er ab, wenn ich meine Array-Größe größer say..300000 mache. Es läuft bei 200000. Die Zahl scheint schrecklich klein. Ist es mein PC, mein Code? Bitte helfen Sie. Mein Ziel ist es zu sehen, wie schnell ich einfache mathematische Berechnungen anstellen kann, in eine Datei schreiben, die Datei schließen, nach dem Öffnen aus der Datei lesen und in eine andere Datei schreiben kann. Ich verwende Codeblocks GNU GCC-Compiler auf Win7. Ich habe auch verschiedene Zahlen aus dem, was ich an der Unterseite des dig2.txt erwarten.c code hat kleine grenze

#include <stdio.h> 
int main() { 
printf("Hello Test\n"); 
FILE *fp; 
FILE *fp2; 
FILE *fp3; 
int a; 
int sizofFile = 300000; 
int pix[sizofFile]; 
int pix2[sizofFile]; 
fp = fopen("dig.txt", "w+"); 
for (a = 0; a<(sizofFile); a = a + 1){ 
    pix[a]=a * 2; //load the array 
    } 
    fwrite(pix, sizeof(a), sizofFile, fp); //stream data to file 
printf("Good bye Test \n"); 
fclose(fp); //close first file 
fp2 = fopen("dig.txt", "r"); // reopen file to read 
fp3 = fopen("dig2.txt", "w+"); // open a write file for human vision 
fread(pix2, sizeof(a), sizofFile, fp2); 
for (a = 0; a < sizofFile; a = a + 1){ 
    fprintf(fp3, "%d \n", pix2[a]); // make human readable 
    } 
fclose(fp2); 
fclose(fp3); 
return 0; 
} 
+0

versuchen lange statt int –

+4

Versuch 'malloc' statt Auto Variable zu verlassen. –

+0

Bitte verwenden Sie einen normalen Code Formatierungsstil - das ist nicht lesbar – KevinDTimm

Antwort

1

Local/Auto-Arrays Speichergröße hängt von der Stapelgröße/auto Variablenspeicher (nicht um 2 erhöht wird). Sie könnten es mit Compiler-Optionen erhöhen, aber das ist nicht der beste Weg.

Sie sollten stattdessen Daten verwenden, die mit malloc zugewiesen wurden, das Limit ist viel, viel höher (hängt nur vom Prozessspeicherlimit/physischen Speicher des Computers ab). So sollten große Arrays zugewiesen werden.

int *pix = malloc(sizofFile * sizeof(int)); 
int *pix2 = malloc(sizofFile * sizeof(int)); 

Verwendung wie Sie jetzt tun, dann vor free der Speicher

free(pix); free(pix2); 
+0

Vielen Dank JFF Ihre Antwort ist klar und auf den Punkt. – Doug

Verwandte Themen