我正在测试和调整协议。当我运行以下代码时,当我使我的数组大小更大时,它崩溃说... 300000。它运行在200000.这个数字看起来非常小。是我的电脑,我的代码?请帮忙。我的目标是看看我能做多快的简单数学,写入文件,关闭文件,打开后读取文件并写入另一个文件。我在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 :(得分:1)
本地/自动数组存储大小取决于堆栈大小/自动变量存储。你可以使用编译器选项来增加它,但这不是最好的方法。
您应该使用分配了malloc
的数据,但限制要高得多(仅取决于计算机的进程内存限制/物理内存)。这就是应该如何分配大数组。
int *pix = malloc(sizofFile * sizeof(int));
int *pix2 = malloc(sizofFile * sizeof(int));
像你现在一样使用,然后离开free
内存
free(pix); free(pix2);