C語言使用free後無法執行的原因以及解決方法

2021-09-17 21:13:05 字數 750 閱讀 5023

先看**:

#include#include#include#pragma warning (disable:4996)

int main()

ps:#pragma warning (disable:4996)僅用在2017版vs中無視安全檢查,getchar()用於暫停執行。

執行結果:

輸入「123」能夠正常輸出「123」,但是free()函式不能正常執行。出現heap corruption detected的錯誤。

例如:

temp = (char *)malloc(sizeof(char)*10);

free用於**使用者在程式執行時動態申請的空間,實際上c程式在執行完全部內容後一些非動態申請空間的變數也會進行空間的**。

實際上陣列也會因為類似於此的問題而導致程式執行失敗。

程式執行時輸入的字串長度超過了陣列申請的長度,儘管仍能夠正常輸出字串。但在程式進入結束階段時程式報錯。

C語言scanf函式使用 s後使用 c無法賦值問題

使用scanf 時 s d lf 等使用時,會從快取區中的讀取資料存入指定的字串或整數中,但當讀到 n 時就會結束。但不會消耗掉 n 因此就不得不面對乙個問題,include main 當你輸入完第乙個字串k後,就會按下回車鍵輸入了乙個 n 而這個 n 不會被消耗,但是 c又可以 接收 n 這就致使...

C 語言 free 函式的原理

今天在網上看到了這樣乙個問題,如果malloc 了一塊字串的記憶體,然後,它改變了這個字串的大小,問會不會有一部分記憶體沒有被釋放掉。這個問題,以前的確沒有仔細想過。當然,我覺得是肯定會釋放掉的,但是一直沒有了解過free 的原理,不敢亂說。我看了一下作業系統的記憶體管理,基本上是這樣的,當然各個系...

C語言中的malloc和free

最近在研究php自定義函式的實現,其中php自定義函式在傳遞引數時,是放到人為的乙個棧中,這個跟寫c程式時,引數入棧的這個棧還不一樣,其中延伸到了 malloc 以及free 有人說在free p 後,要將p設定為null,在查詢了一翻資料後,大體上弄明白了是怎麼回事 malloc是向os要一塊記憶...