c语言编程,编译成功,但是调试失败~!!怎么回事。。求助~~

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
float x[60000][15];
char name1,name2,c;
char DEPTH,AC,RT,RI,RXO,SP,CALI,GR,CNL,DEN;
float sdep,edlp,relv;
FILE *fp1,*fp2;
printf("enter,sdep,edlp,relv=");
scanf("%f%f%f",&sdep,&edlp,&relv);
if ((fp1=fopen("d:4.txt","w"))==NULL)
{
printf("Cannot open file\n");
exit(0);
}
if ((fp2=fopen("d:4.txt","w"))==NULL)
{
printf("Cannot open file,press any key to exit!\n");
exit(0);
}
float n;
int m=9,i,j;
n=(edlp-sdep)/relv+1;
m=9;
/* read data from input file*/
fscanf(fp2,"%c%c%c%c%c%c%c%c%c",&DEPTH,&AC,&RT,&RI,&RXO,&SP,&CALI,&GR,&CNL,&DEN);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
fscanf(fp1,"%f",&x[i][j]);
fclose(fp1);
/* display data*/
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("%f",x[i][j]);
}

楼主你好!
你是不是发现编译没有报错!但是一旦运行就会进入异常而中断报错!
我通过调试发现是栈溢出而造成的异常中断!
这个问题还得从你的 float x[60000][15] 说起。且不算后面定义的变量,通过计算我们知道大概将近3.6M左右!
这个设计到程序的堆栈问题!不知道你是否了解程序的反汇编,简单的说,每个程序都有自己的栈,你定义的局部变量就在这个栈上!而这个栈不是无限的大的,在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M,如果申请的空间超过栈的剩余空间时,将提示overflow!具体可以去了解一下程序的反汇编!
因此,你代码本身没有错误,但是运行不起来是栈溢出了!
如果,你还是想要分配60000个15个成员float类型的数值,那你就得使用malloc来申请空间,malloc申请的空间是在堆上的,malloc函数你自己可以去了解,这个跟栈是不一样的,有兴趣可以去了解堆和栈的区别!
以上是我的看法,希望我的回答对你有帮助!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-28
(60000*15+3)*8[float]+13*1[char]+2*4[FILE*]=7200045个字节,合将近7M的内存,你够吗?
第2个回答  2013-02-28
啥错误,贴出来看看
相似回答