指针变量最好作为全局变量

时间:2022-11-22 12:26:43

下面有一个程序。如果把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;

}