c代码有小限制

标签 c windows-7

我正在测试和调整协议(protocol)。当我运行以下代码时,当我增大数组大小(例如 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;
}

最佳答案

本地/自动数组存储大小取决于堆栈大小/自动变量存储。您可以使用编译器选项来增加它,但这不是最好的方法。

您应该使用用 malloc 分配的数据,限制要高得多(仅取决于进程内存限制/计算机的物理内存)。这就是应该如何分配大数组。

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

像现在一样使用,然后在释放内存之前

free(pix); free(pix2);

关于c代码有小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42628533/

相关文章:

c - C 中的文件 IO 缓冲

c - 将结构定义为 extern

c - 通过 typedef 传递和使用结构

c - 在 Windows 操作系统中使用 C 运行 GTK 库的任何方式?

opengl - 为 64 位 Windows 寻找 OpenGL 的安装

c++ - GetTempFileName 在 Windows 10 上似乎已损坏

c - C 中的循环语句

powershell - 使用PowerShell从资源管理器的收藏夹栏中添加和删除快捷方式

eclipse - 如何让 Eclipse(32 位)在 Windows 7 中正常运行?非管理员

C 宏未按预期工作