程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> c語言編程,編譯成功,但是調試失敗~!!怎麼回事。。求助~~

c語言編程,編譯成功,但是調試失敗~!!怎麼回事。。求助~~

編輯:C語言問答

c語言編程,編譯成功,但是調試失敗~!!怎麼回事。。求助~~

#include
#include
#include
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 for(j=0;jfscanf(fp1,"%f",&x[i][j]);
fclose(fp1);
/* display data*/
for(i=0;i for(j=0;jprintf("%f",x[i][j]);
}

最佳回答:

樓主你好!
你是不是發現編譯沒有報錯!但是一旦運行就會進入異常而中斷報錯!
我通過調試發現是棧溢出而造成的異常中斷!
這個問題還得從你的 float x[60000][15] 說起。且不算後面定義的變量,通過計算我們知道大概將近3.6M左右!
這個設計到程序的堆棧問題!不知道你是否了解程序的反匯編,簡單的說,每個程序都有自己的棧,你定義的局部變量就在這個棧上!而這個棧不是無限的大的,在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M,如果申請的空間超過棧的剩余空間時,將提示overflow!具體可以去了解一下程序的反匯編!
因此,你代碼本身沒有錯誤,但是運行不起來是棧溢出了!
如果,你還是想要分配60000個15個成員float類型的數值,那你就得使用malloc來申請空間,malloc申請的空間是在堆上的,malloc函數你自己可以去了解,這個跟棧是不一樣的,有興趣可以去了解堆和棧的區別!
以上是我的看法,希望我的回答對你有幫助!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved