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
啥错误,贴出来看看

为什么有时候C语言编程调试得不出正确结果,退出后再进调试就可以得出正...
程序有错,不一定是代码写错了,也有可能是逻辑错误,条件判断有漏洞,地址访问越界。像你这种情况,很大可能有以下错误:1、变量没有给初值,就直接参与循环运算,变量初值为随机值。2、循环访问数组,超出数组维度,访问到未定义的地址内容。3、多个函数调用了同一个地址(比如同一个全局变量,或传递了...

C语言为什么编程的时候编译没错,组建错误。
你说的组建错误多半是link出错吧,这个很可能是你安装的路径不是默认那个路径,于是,可能需要你自己修改一下编译器设置,你可以到网上搜一下到底是在什么地方设置。我记不清楚具体位置了,就是设置链接器的路径。在对vc进行设置的那个菜单里面找一找,里面就有各种路径设置,包括头文件路径啊,可执行文...

C语言习题求助,编译通过,运行错误,高分求解
Warning 警告类型错误有很多种。例如:(1)、虽然定义了某个变量,但是没有对其是否成功初始化就使用、(2)、把赋值符号的等于(=)写成了逻辑相等(==),等等。例如对于(1)而言:include <stdlib.h> \/* malloc( ) 函数原型在此头文件中定义 *\/ void main( ){ char * p ;p = (char *...

c语言编程,编译无错,运行出错
1 你所谓的运行时问题,即栈溢出(stack overflow), 解决方法是使用c语言的malloc函数(相当于C++的new操作符)在堆上分配内存(当然最后根据输出文件的答案来看,你确实数据给大了)2 逻辑问题,如楼上各楼所说:s[i]=s[i-1]+A[i];而不是s[i]=s[i-1]+s[i];你中学数学知识都忘了。。。

用C语言编程程序没有错误为什么结果不对
是运行期错误,在编译连接的过程不会出错的,不过幸好,编译器也为我们 提供了一些解决类似运行期错误的一些调试工具,通过debug,进行单步调 试下,观察变量值,看看是不是你想要的等等解决此类问题,具体如何单步 调试见下面:不过你先要设置断点,然后按下面操作 在VC++6.0中的单步调试:调试重要的几个键:F9...

C语言为什么会出现:编译通过,执行失败 的情况?
语法对,语义错,溢出错,下标超界,指针未分配单元。很多啦。新手常犯错误:void main(){ int a=0;scanf("%d",a);printf("%d \\n",a);} 错在 scanf("%d",a); -- 应当是 scanf("%d",&a);编译通过,执行失败!

紧急求助!!vc6.0编入任何程序,总是调试错误!
C:\\Program Files\\Microsoft Visual Studio\\VC98\\ATL\\INCLUDE C:\\Program Files\\Microsoft Visual Studio\\VC98\\CRT\\SRC 如果你装在其他盘里,则仿照其路径变通就行。关键是microsoft visual studio\\ 后面的东西要相同。是在是不行就重装。vc 6.0里可以做C语言编程,但是不要使用clrscr()和getch()...

C语言编程中,调试出现error C2143: syntax error : missing ';' befor...
int main(){ ???int i;???double a,b,c,d,e,f,cash;???\/\/这2行给你写前面了,具体原因往下看 ???printf("请输入本月利润:\\n");\/\/反斜杠打错了吧????scanf("%d",i);\/\/你不先给 i 赋值,就直接使用 i ????a=0.1*i;???\/\/下边这几行有几个乘号忘了写啦 ???b=1...

我在用C语言编程时,编译后总出现Error:spawning C1.exe的错误,看不懂...
原因可能是因为你计算机上的VC是从别的计算机上面拷来的,而非直接安装,所以设置的编译器路径需要重新设置。具体的解决方法:1、在菜单栏的【工具】(Tools)中选择【选项】(Options),在打开的对话框中选择【路径】(Directories);在右边的目录“Show directories for:”下拉表中选择【可执行文件】(...

这是一个倒序的c语言编程问题,编译没有错误,但就是运行无结果,求高人...
char a[30],b[30];int i,j;printf("input numbers.\\n");for(i=0;i<30;i++){ scanf("%c",&a[i]); \/\/输入字符为%c if(a[i]=='\\n') \/\/比较是== break;} for(j=0;i>0;){ b[j]=a[i-1];i--;j++;} b[j]='\\0';\/\/不需要+1 \/ for(;j>0;j--)printf("...

相似回答