2017-03-06 10 views
0

私はプロトコルをテストして調整しています。次のコードを実行すると、配列サイズをsay.300000より大きくするとクラッシュします。それは200000で動作します。その数は非常に少ないようです。それは私のPC、私のコードですか?助けてください。私の目標は、簡単な数学、ファイルへの書き込み、ファイルのクローズ、開いた後のファイルからの読み取り、別のファイルへの書き込みなどがどれほど速くできるかを確認することです。私はwin7でCodeblocks GNU GCCコンパイラを使用しています。また、私はdig2.txtの下部に期待するものとは異なる番号を取得。(2ずつ増加していない)コードには小さな制限があります

#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

ではなく自動変数のmalloc' 'てみ –

+4

intの代わりに長くしてみてください。 –

+0

通常のコード書式を使用してください。これは読めません。 – KevinDTimm

答えて

1

ローカル/オートアレイストレージのサイズがスタックサイズ/自動変数ストレージに依存します。あなたはコンパイラオプションを使ってそれを増やすことができますが、それは最善の方法ではありません。

代わりにmallocで割り当てられたデータを使用する必要があります。制限ははるかに高くなります(コンピュータのプロセスメモリ制限/物理メモリのみに依存します)。それは大きな配列を割り当てる方法です。

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

使用あなたが今やっているように、その後、freeメモリを離れる前に

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

ありがとうJFFあなたの答えは明確で、ポイントです。 – Doug

関連する問題