发布网友
共2个回答
热心网友
楼主,那是因为你给数组a、数组f分配空间时,操作系统栈的空间不够分配给两个数组,所以你的数组根本无法初始化,肯定出错。
解决方法:把你的数组定义为静态变量,或是全局变量。
即:
定义为静态变量(直接在前面加static即可,注意不能先赋值):static long a[1001][1001];
static long f[1001][1001];
定义为全局变量(位置在main函数前面):long a[1001][1001] = {0};
long f[1001][1001] = {0};
为什么要这么操作:
操作系统给程序运行的内存非了4个区域:
1 代码区:顾名思义就是存放运行的代码的
2 全局数据区: 存放全局数据和静态数据以及常量.
3 栈区 函数调用时的返回地址,参数压栈,局部变量,返回数据等都存放在栈区.
4 堆区,存放程序动态分配的内存(new,malloc等函数分配的)
栈内存是由系统自己分配和释放的,而堆内存要由程序员自己全全控制的,否则会出现内存泄露
热心网友
程序粗看没什么问题,可能是输入的数据有问题吧,比如n的值越界,再就是重定位函数没有判断返回值是否正常,主要是第二个freopen的第二个格式参数给的是w必须文件存在才能写入,如果.out文件不存在的话应该用"w+"