警告 C26408
請避免
malloc()
和free()
,偏好nothrow
使用delete
的版本new
(r.10)
此警告旗標會根據 malloc
R.10 明確叫用 或 free
的位置:避免 malloc
和 free
。 這類警告的其中一個可能修正方式是使用 std::make_unique ,以避免明確建立和破壞物件。 如果無法接受這類修正,應該優先使用運算子 new 和 delete 。 在某些情況下,如果例外狀況不受歡迎, malloc
而且 free
可以取代為 nothrow 版本的運算子 new
和 delete
。
備註
若要偵測
malloc()
,我們會檢查呼叫是否叫用名為malloc
或std::malloc
的全域函式。 函式必須傳回 的指標,void
並接受一個不帶正負號整數類型的參數。若要偵測
free()
,我們會檢查名為free
的全域函式,或std::free
未傳回任何結果並接受一個參數,這是 的void
指標。
程式碼分析名稱: NO_MALLOC_FREE
另請參閱
範例
#include <new>
struct myStruct {};
void function_malloc_free() {
myStruct* ms = static_cast<myStruct*>(malloc(sizeof(myStruct))); // C26408
free(ms); // C26408
}
void function_nothrow_new_delete() {
myStruct* ms = new(std::nothrow) myStruct;
operator delete (ms, std::nothrow);
}