共用方式為


警告 C26408

請避免 malloc()free() ,偏好 nothrow 使用 delete 的版本 new (r.10)

此警告旗標會根據 malloc R.10 明確叫用 或 free 的位置:避免 mallocfree 。 這類警告的其中一個可能修正方式是使用 std::make_unique ,以避免明確建立和破壞物件。 如果無法接受這類修正,應該優先使用運算子 new 和 delete 。 在某些情況下,如果例外狀況不受歡迎, malloc 而且 free 可以取代為 nothrow 版本的運算子 newdelete

備註

  • 若要偵測 malloc() ,我們會檢查呼叫是否叫用名為 mallocstd::malloc 的全域函式。 函式必須傳回 的指標, void 並接受一個不帶正負號整數類型的參數。

  • 若要偵測 free() ,我們會檢查名為 free 的全域函式,或 std::free 未傳回任何結果並接受一個參數,這是 的 void 指標。

程式碼分析名稱: NO_MALLOC_FREE

另請參閱

C++ 核心指導方針 R.10

範例

#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);
}