C代码 - 没有足够的可用内存来将数据从txt文件读入1D动态数组以进行调试模式

时间:2015-09-03 16:15:38

标签: c memory malloc scanf

我写了一个C代码,将fscanf .txt文件写入一维动态数组。 txt文件中的数据写在一个108x108x108整数的列中。但是,它说"没有足够的存储空间来处理这个命令"当我试图调试时。如果我使用Batch Build来构建版本和调试,只有Release模式可以成功地将数据加载到动态数组中。另一方面,它显示"没有足够的可用内存来运行该程序。退出一个或多个程序,然后再试一次"当我试图点击调试模式.exe。顺便说一句,我的电脑有16 GB Ram,所以它不应该溢出内存。任何人都可以查看我的代码并帮助我解决这个问题?我真的很感激你的答案。

#define IMMX        108
#define IMMY        108
#define IMMZ        108

int *one;
int Max = IMMX*IMMY*IMMZ;

void input_var(void); // Input 
void output_fields(void); // Output 

void main(int argc,char *argv[])
{
 input_var();

 output_fields();

 free(one);
 one = NULL;

}

void input_var(void)
{
 FILE *rf = fopen("108x108x108.txt","r"); //108*108**108 integers in a single column is 108x108x108.txt file

 one = (int *)malloc(sizeof(int)*Max);
 for(int i=0;i<Max;i++)
    {
     one[i] = 0;
    }

    if (rf == NULL){
        printf("Unable to open file\n");
        } else {
        for (int i=0;i<Max; i++)
         {
           fscanf(rf,"%i",&one[i]);
         }
        fclose(rf);
        }
     }

void output_fields(void)
{
    FILE *file1 = fopen("one", "w");
    for(int i=0;i<Max;i=i++)
       {
         fprintf(file1,"%i",one[i]);
         fprintf(file1,"\n");
       }
    fclose(file1);
 }

1 个答案:

答案 0 :(得分:0)

我没有创建整数文件,

然而,我确实解决了所有的问题。已发布代码中的项目,包括添加所需的错误检查,main()函数的声明等

以下代码干净利落地编译并且应该正常工作

#include <stdio.h>
#include <stdlib.h> // exit(), EXIT_FAILURE
#include <string.h> // memset()

#define IMMX        (108) // when #define'ing numerics, always wrap in parens
#define IMMY        (108)
#define IMMZ        (108)

int *one;
int Max = IMMX*IMMY*IMMZ;

// prototypes
void input_var(void); // Input
void output_fields(void); // Output

int main( void )
{
    input_var();

    output_fields();

    free(one);
    one = NULL;

    return 0; // added as part of correction to main() declaration
} // end function: main

void input_var(void)
{
    FILE *rf = NULL;
    if( NULL == (rf = fopen("108x108x108.txt","r") ) ) //108*108**108 integers in a single column is 108x108x108.txt file
    { // then fopen failed
        perror( "fopen for 108x108x108.txt for input failed");
        exit( EXIT_FAILURE );
    }

    // implied else, fopen successful

    one = malloc(sizeof(int)*Max);
    if( NULL == one )
    { // then, malloc failed
        perror( "malloc for 108*108*108 ints failed");
        fclose( rf ); // cleanup
        exit( EXIT_FAILURE );
    }

    // implied else, malloc successful

    memset( one, 0x00, Max); // initialize the array of ints

    for (int i=0;i<Max; i++) // note: 'i++', not 'i=i++'
    {
        if( 1 != fscanf(rf,"%i",&one[i]) )
        { // then fscanf failed
            perror( "fscanf failed");
            fclose( rf ); // cleanup
            free( one );  // cleanup
            exit( EXIT_FAILURE );
        }

        // implied else, fscanf successful
    } // end for
    fclose(rf);
} // end function: input_var


void output_fields(void)
{
    FILE *file1 = NULL;
    if( NULL == (file1 = fopen("one", "w") ) )
    { // then fopen failed
        perror( "fopen for output file failed");
        free( one ); // cleanup
        exit( EXIT_FAILURE );
    }

    // implied else, fopen successful

    for(int i=0; i<Max; i++)
    {
        fprintf(file1,"%i\n",one[i]);
    }
    fclose(file1);
} // end function: output_fields