① c數據結構為什麼一運行內存就會崩潰
【1】一運行就崩潰的原因:main函數中的BiTree T; 這個指針T指向了未知的位置,並非空指針,當create_BST函數調用Insert_BST函數,不會進入
if (T==NULL)
{T=q;
//p=T;
}
而是進入語句p=T; p是剛申請了內存的指針,現在又把一個指向未知區域的指針地址賦值給它,使它再操作左右子樹時又指向不同未知地址,操作了不該操作的內存,當然會出錯。自己可以設置斷點調試一下就知道了。改為BiTree T=NULL,這樣就可以創建和輸出整棵樹了。
【2】刪除節點函數是有問題的,自己可以搜一下二叉排序樹刪除節點的程序,很多。
② c語言 程序能運行,但是有時運行中間會崩潰,一般因為什麼怎麼解決
程序設計的很重要一點就是要保證程序的穩定性,運行時崩潰就是穩定性不夠,一般比較常見的就是數據類型不符、內存泄漏等錯誤造成的。還有,C語言的穩定性上一般也是比較差的
③ 這個c語言代碼哪裡出問題了一運行就崩潰
如果直接在編譯器中運行(後面沒有參數,文件in用的是第一個參數*argu[1],文件out用的是第二個參數*argu[2]),那麼就會崩潰。因為沒有參數,那麼文件打開就失敗了,而繼續對打開失敗的文件指針進行操作就崩潰了。
正確的用法是,編譯成.exe文件後,在DOS窗口中進入這個.exe文件所在目錄,然後輸入「這個.exe文件名 輸入文件名字 輸出文件名 回車」才行。比如我編譯好的文件名是1.exe,輸入文件名是input.txt,准備輸出的文件叫out.txt,那麼就不會崩潰了,如圖
要避免沒有輸入參數崩潰的情況,可以在程序中進行文件打開判斷,在
in=fopen(argu[1],"r");
out=fopen(argu[2],"w");
後面增加打開判斷
if(in == NULL || out == NULL) exit(1);
就不至於沒有參數的時候崩潰,而是直接退出(或者也可以在這個if後面加上使用說明的輸出信息)。
④ C語言編程時編譯組建都沒問題但是運行崩潰了
你的參數傳遞的不對,max和min已經是指針了,在加上*號就不是指針了。調用fun函數的時候直接傳max和min就行,不用帶*號。使用&符號傳遞時雖然滿足了類型的要求,但是實際是對指針再次取地址了,參數內容也不對。
⑤ c語言編程程序崩潰
同學,你是對c語言的按值傳遞理解不到位。
void s ( int * p_c )
{
p_contemp = ( int * ) malloc ( 5 * sizeof ( int ) )
此處為for循環控制語句依次給數組依次輸入5個數
}
你最初的代碼,s ( int * p_c )中,你用malloc 分配了5個int的空間,把此空間的地址賦給了p_contemp,而沒有賦給指針p_c,所以p_c指向空,在main()中調用a . h_p
會出錯,其為空指針。
而且就算你在s ( int * p_c )中,把malloc 分配的5個int的空間的地址賦給s的參數p_c指針,在main()中,調用a . h_p ,仍然會出錯,a . h_p 仍然為空指針。
因為在c語言中函數的參數是按值傳遞的,即在本題中,你把a . h_p 作為實參傳遞給s ( int * p_c )函數,此時a.h_p為空指針,根據按值傳遞規則,形參p_c將與實a.h_p具有相同的值:空。
在s ( int * p_c )內,( int * ) malloc ( 5 * sizeof ( int ) )執行後,把分配到的空間地址賦給形參p_c,此時形參p_c不為空了,但是根據按值傳遞原則,實參所指向的地址沒變,仍為空。
你所謂的「指針傳遞只要改一個,另一個的內容應該也做了改動」是對的,但是你的代碼寫的不對。你可以在函數外面弄一個指向某個地址的指針,把它傳給一個參數為指針的函數,在函數內修改指針指向的內容,則在函數外實參指針指向的內容也會變。
你也可以考慮用c++的引用傳遞,即把你最初的s ( int * p_c )聲明為s ( int * &p_c ),其它代碼不變,就能看到你想要的效果。
⑥ 一個c語言問題,為什麼不報錯,但程序運行到一半就崩潰了呢
說明你寫的代碼沒用語法錯誤,但是邏輯有錯誤!
程序運行到一半,就無法運行了!
編譯器不報錯,不代表你的程序就是對的!
⑦ C語言一運行就崩潰 編譯器檢查不出錯誤
#include
<stdio.h>
#include
<conio.h>
void
main()
{
int
a;
printf("請輸入一個年份:\n");
scanf("%d",&a);
if((a%4)==0
&&
(a%100)!=0)//多個=號
{
printf("這一年是閏年。\n");
}
else
if(
a%100==0
&&
a%400==0
)
{
printf("這一年是閏年。\n");
}
else
{
printf("這一年是平年。\n");//分號要英文符號,你打的是中文的
}
getch();
}//語法錯誤的已經幫你注釋出來了
⑧ C語言程序運行崩潰
這種情況叫做 runtime error (運行時錯誤)。
在Windows7 上這樣提示:
runtimeerror(運行時錯誤)就是程序運行到一半,程序就崩潰了。
比如說:
①除以零
②數組越界:inta[3];a[10000000]=10;
③指針越界:int*p;p=(int*)malloc(5*sizeof(int));*(p+1000000)=10;
④使用已經釋放的空間:int*p;p=(int*)malloc(5*sizeof(int));free(p);*p=10;
⑤數組開得太大,超出了棧的范圍,造成棧溢出:inta[100000000]
⑨ C語言程序運行後 出現exe停止工作 為什麼呢
這種情況叫做 runtime error (運行時錯誤)。
在 Windows 7 上這樣提示:
runtimeerror(運行時錯誤)就是程序運行到一半,程序就崩潰了。
比如說:
①除以零
②數組越界:inta[3];a[10000000]=10;
③指針越界:int*p;p=(int*)malloc(5*sizeof(int));*(p+1000000)=10;
④使用已經釋放的空間:int*p;p=(int*)malloc(5*sizeof(int));free(p);*p=10;
⑤數組開得太大,超出了棧的范圍,造成棧溢出:inta[100000000]
⑩ C語言的問題,為什麼運行會停止工作(無響應)
1、程序停止響應,是因為內存出現非法讀寫操作,請檢查代碼所有關於內存讀寫的地方。
2、例如:
不能用下標
10
讀取數組
x1
的內容,這樣子會導致數組上標越界
只能使用
0
-
9
來讀取數組
x1
的內容