假設我做了這樣的事情:
char* m = (char*)malloc(sizeof(char) * 100);
m = (char*)realloc(m, 0)
m會怎么樣?記憶體會被釋放嗎?謝謝
uj5u.com熱心網友回復:
在這種情況下,行為是實作定義的。
來自 C 標準(7.22.3 記憶體管理函式)
- ...如果請求的空間大小為零,則行為是實作定義的:要么回傳空指標以指示錯誤,要么行為就像大小是某個非零值一樣,除了回傳的指標應不能用于訪問物件。
例如,系統可以釋放分配的記憶體并回傳一個非空指標。
uj5u.com熱心網友回復:
m會怎么樣?記憶體會被釋放嗎?
C正在這個領域發展。
C17 更新了這個規范。
“如果請求的空間大小為零,則行為是實作定義的:要么回傳空指標以指示錯誤,要么行為就像大小是某個非零值一樣,除了回傳的指標不應為用于訪問一個物件。”。
C17dr 7.22.3
并且有
realloc使用等于零的大小引數進行呼叫是一個過時的功能。
C17dr 7.31.12 2
最好避免realloc(m, 0)和呼叫free(m); m = NULL;釋放分配。
m = (char*)realloc(m, 0)可能不會完全釋放記憶體資源并回傳非NULL.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/393381.html
上一篇:如何從字串中獲取復雜結構?
下一篇:粘貼兩個字串以實作所需的組合
