下面有一个程序。如果把fin,fout定义为全局变量,则一点事儿都没有,但是如果把fin,fout定义在主函数内部,则会发生异常,程序退出值为-1073741510。(Process terminated with status -1073741510)。
我整整排查了一个下午。
起初怀疑是自己程序的问题,里里外外检查了若干遍,没有发现错误。
后来发现把FILE* fin,换成ifstream fin,其他地方也一并照改,把文件指针全都换成了输入输出流,运行就正确了。
于是怀疑是用错了fprintf的问题。找了一些资料来看,自己的使用是正确的没有问题。
考虑到其他题目也是照样用fprintf做的,都没有问题。真是诡异。然后又怀疑是cena的问题。
但是同样的不可解释,其他题为何可以用fprintf,在cena上一样跑。
现在也没有搞明白是怎么回事。难道是bug?
本题为积木城堡的程序。
#include <iostream>
#include <fstream>
using namespace std;
short n;
short cheng[101][101];//城堡
short num[101];//每个城堡的积木数
bool height[101][10001];//每个城堡可能达到的高度
short hh[101];//每个城堡搭建过程中能达到的最大高度。
short maxh=0;
int main()
{
//ifstream fin("city.in");
//ofstream fout("city.out");
FILE* fin,*fout;
if((fin=fopen("data2.in","r+"))==0)printf("fin fail");
if((fout=fopen("data2.out","w"))==0)printf("fout fail");
fscanf(fin,"%d",&n);
//fin>>n;
short temp=0;
for(int i=0;i<n;i++)
{
for(int j=0;;j++)
{//fin>>temp;
fscanf(fin,"%d",&temp);
if(temp==-1)
{
num[i]=j;
break;
}
else cheng[i][j]=temp;
}
}
for(int i=0;i<n;i++)
for(int j=0;j<num[i];j++)
{for(int k=hh[i];k>=0;k--)
{
if(k==0||height[i][k]>0)
{
height[i][k+cheng[i][j]]=1;
}
}
hh[i]+=cheng[i][j];
}
int minone=100001;
for(int i=0;i<n;i++)
{
if(hh[i]<minone)
minone=hh[i];
}
bool flag=0;
for(int j=minone;j>=0;j--)
{
flag=0;
for(int i=0;i<n;i++)
if(height[i][j]==0)
{
flag=1;
break;
}
if(j==0||flag==0)
{
fprintf(fout,"%d",j);
break;
}
}
return 0;
}