none
用C读TXT文件过大,导致内存溢出 RRS feed

  • 问题

  • 我想C读取TXT文件里面的数据,并且转存到一个2维数组中,当数据量小的时候可以实现,数据太大就会导致数据丢失,请高手指教!!

    我的程序如下:

    #include<stdio.h>
    #include<stdlib.h>
    int main ()
    {
    int i,j;
    char name[30];
    FILE *outfile;
    double num[260][256];
    if((outfile=fopen("D:\\matlab\\work\\D507-1.txt","r"))==NULL)
    {
    printf("文件打开失败,可能文件名错误。\n");
    exit(0);
    }
    printf("文件中的数据为:\n");
    for(i=0;i<260;i++)
    {
    for(j=0;j<256;j++)
    {
    num[i][j]=0;
    fscanf(outfile,"%lf",&num[i][j]);
    printf("%10.6f ",num[i][j]);
    }
    printf("\n");
    }
    fclose(outfile);
    return 0;
    }

    不管能不能解决,小弟都感激不尽。

    2010年5月18日 3:58

答案

  • 可以动态分配数组大小,C的话用malloc。

    int* num=(int*)malloc(sizeof(int));

    用完之后记得free(num);

    • 已编辑 若等闲 2010年5月19日 18:25 追加
    • 已标记为答案 KeFang Chen 2010年5月25日 6:58
    2010年5月19日 18:23
  • 你首先得确定文件数据格式与你的%lf匹配,然后就是你的文件内容可能不够大.在读取前需要做判断.
    2010年5月20日 7:12
  • 大的数组必须使用new或者malloc动态分配。

    局部变量是分配在进程的栈里的,一般栈只有1M,大了肯定就不行了。

    new,malloc是分配在全局的内存堆里的,这样理论上你内存有多大,你就可以分配多大的空间


    0xBAADF00D
    2010年5月20日 15:26
    版主

全部回复

  • 可以动态分配数组大小,C的话用malloc。

    int* num=(int*)malloc(sizeof(int));

    用完之后记得free(num);

    • 已编辑 若等闲 2010年5月19日 18:25 追加
    • 已标记为答案 KeFang Chen 2010年5月25日 6:58
    2010年5月19日 18:23
  • 你首先得确定文件数据格式与你的%lf匹配,然后就是你的文件内容可能不够大.在读取前需要做判断.
    2010年5月20日 7:12
  • 大的数组必须使用new或者malloc动态分配。

    局部变量是分配在进程的栈里的,一般栈只有1M,大了肯定就不行了。

    new,malloc是分配在全局的内存堆里的,这样理论上你内存有多大,你就可以分配多大的空间


    0xBAADF00D
    2010年5月20日 15:26
    版主