動態分配malloc realloc free

2021-06-21 13:48:00 字數 798 閱讀 7446

1 malloc( unsigned int num_bytes)

分配長度為num_bytes的記憶體塊,

注意: malloc 只管分配不進行初始化和越界判斷,即剛獲得的記憶體中的資料是隨機的;

不進行越界判斷 例如:

char *k = malloc(10);

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

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

輸出結果: ccccccccccccccccccccccccc

輸出20個c。雖然分配了10個位元組,但超出10個也能用,不過當訪問到其他不能訪問的記憶體是系統會報錯,還有,超出部分不會被系統保護,即系統會認為它是沒被使用的,可能會分配給別的變數,從而改變其中的內容;

2 realloc  

原型:extern void *realloc(void *mem_address, unsigned int newsize);

指標名=(資料型別*)realloc(要改變記憶體大小的指標名,新的大小)。

先按照newsize指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域,同時返回新分配的記憶體區域的首位址。即重新分配儲存器塊的位址。

3 關於記憶體洩漏

記憶體洩漏也稱作「儲存滲漏」,用動態儲存分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。即所謂記憶體洩漏。

自己遇到的記憶體洩漏情況時 程式執行一段時間後出現「out of memery" 錯誤退出;

所以malloc 申請記憶體後要記著free掉;

mallco動態分配 malloc動態分配多維陣列

下面試自己寫的三個測試程式,如果看懂了基本上動態分配多維陣列就沒什麼問題啦 重點 1 深刻理解多維陣列的概念,多維陣列在記憶體中的分配情況,基本上動態分配也沒什麼問題的。然後還要注意一點的就是,釋放是分配的逆過程!include include include void main void int ...

記憶體動態分配

陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...

動態分配記憶體

動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。c語言動態記憶體分配相關的函式。include void malloc size t size malloc的使用比較直接,乙個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤 置為enomem。教材...