2017-03-06 103 views
0

我正在測試和調整協議。當我運行下面的代碼時,它會崩潰,當我使我的數組大小更大說30000。它運行在200000.該數字似乎非常小。是我的電腦,我的代碼嗎?請幫忙。我的目標是看看我可以用多快的速度完成簡單的數學運算,寫入文件,關閉文件,打開文件之後從文件中讀取數據並寫入其他文件。我在win7上使用Codeblocks GNU GCC編譯器。我也從我期望在dig2.txt底部得到不同的數字。(不增加2)c代碼有小限制

#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

之前嘗試的長不是int –

+4

嘗試'malloc',而不是自動變量。 –

+0

請使用正常的代碼格式樣式 - 這是不可讀的 – KevinDTimm

回答

1

本地/自動陣列存儲大小取決於堆棧大小/自動變量存儲。你可以使用編譯器選項來增加它,但這不是最好的方法。

您應該使用與malloc一起分配的數據,而不是限制更多,更高(僅取決於計算機的進程內存限制/物理內存)。這就是應該分配多大的數組。

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

使用像你現在這樣,然後離開free內存

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

謝謝JFF你的回答很清楚並且重點突出。 – Doug