我写了一个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);
}
答案 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