麻煩幫我看看這個程式錯在哪

時間 2022-05-16 10:50:04

1樓:陳宗權

問題在於你

s=(char*)malloc(i*sizeof(char));

這一步分配記憶體不足,i是從0開始的下標,作為數量使用時要用i+1。或者你這裡直接用上面的n,把這一行改成

s=(char*)malloc(n*sizeof(char));即可。

2樓:匿名使用者

for(;;i*=10)

p=(int*)malloc(n*sizeof(int));

問題出現在這一部分上 ,當你輸入的數小於10的時候,n的值為0從而p=(int*)malloc(n*sizeof(int));這裡就沒有申請到記憶體空間,從而導致最後free(p)時出錯

3樓:擁雲莊主

對動態分配的陣列s的使用越界了,分配的大小為i,但是後面的迴圈裡:

s=(char*)malloc(i*sizeof(char));

for(j=0;j<=i;j++)

.....

會用到s[i]。我們知道,大小為i的陣列,下標索引的有效範圍應該是0~i-1,越界之後,用的時候不會報錯,但釋放的時候會報錯。因為系統動態分配記憶體的時候,會在動態分配的陣列範圍前後各加一個標誌,來記錄陣列的範圍,如果兩個標誌被佔用之後,釋放的時候,一般就會報"damage:

before normal block」或"damage: after normal block」,這裡報的是after normal block,所以,應該是後面越界了。

給s多分配一個位元組即可:

s=(char*)malloc(i*sizeof(char) );改為:

s=(char*)malloc(i*sizeof(char) + 1);

除錯過,沒問題。

另外,只有當輸入的數大於15時才做處理,所以,對記憶體的釋放free(p);free(s);

要放到else裡面去。

這個程式錯在哪了,這個程式錯在哪

我看出來了 樓主的程式 是想根據 輸入的一個數 輸出它的 個位 十位 百位.的錯誤 主要是 a i b pow 10,i 10 因為你進行了 除法運算 得到的數字 不一定是int型 所以程式報錯 你可以進行個強轉 a i int b pow 10,i 10 就可以了 pow 10,i 的結果型別為d...

麻煩幫我看看這個藥方是治什麼的,幫我看看這個藥方是治療什麼的?主要是治療什麼的?

梨1衣1子 當歸,補血和血調經止痛,潤燥滑腸,主治月經不調,痛經,血虛閉經,腹痛便祕等.白芍 養血柔肝,緩中止痛,斂陰收汗。治胸腹脅肋疼痛,瀉痢腹痛,自汗盜汗,陰虛發熱,月經不調,崩漏,帶下。川芎 行氣開鬱,法風燥溼,活血止痛。治風冷頭痛旋暈,脅痛腹疼,寒痺筋攣,經閉,難產,產後瘀阻塊痛,癰疽瘡瘍。...

請各位幫我看看這個遍歷排序二叉樹程式錯哪兒了?只能遍歷坐邊的樹,到右邊就彈出了

看這個吧,跟你的設計一摸一樣,有註釋,你的沒有註釋,有些不怎麼好理解。include stdio.h include stdlib.h struct tree 宣告樹的結構 typedef struct tree treenode 宣告新型別樹結構 typedef treenode b tree 宣...