簡體   English   中英

如果我不能使用 memset,如何清除結構?

[英]How do I clear a struct if I can't use memset?

我正在使用之前用 clang++ 編譯的一段 C++ 代碼(用於 x86)。 在轉換為 gcc 時,我在以下行看到錯誤:

    memset(tracking, 0, sizeof(dbg_log_tracking_t));

I understand that I can't memset a 'non-trivial' (compiler's words) class, or something with a vtable, but this is a struct , it's a block of memory and nothing more, yet on compile, g++ tells me that I無法清除非平凡類型的 object。

我得到了一個指針作為緩沖區,我將從 phy 將數據讀入該緩沖區,然后使用該結構進行解包。 在讀取完成之前,需要將此結構清零。

在 C 中,我可以愉快地射中自己的腳。 如果我這樣選擇,我可以將 main() 設置為 null,但在這里我不能這樣做是非常令人沮喪的。

我能想到的唯一解決方案是保留該結構的 static 實例,該實例已經歸零,然后對其進行 memcpy 處理,但這看起來就像 memset 有額外的步驟並浪費了 memory。

如果沒有編寫一個清晰的 function 來觸及這個特定結構的每個字段(我想要這樣做的任何時候都必須這樣做),我如何將整個結構歸零?

如果您使用的是 C++ 11 或更高版本

tracking = {};

應該管用

我想你想要的是:

memset(&tracking, 0, sizeof(dbg_log_tracking_t));
//     ^ Note ampersand

我假設跟蹤是您的結構的一個實例。

IE

dbg_log_tracking_t tracking;
memset(&tracking, 0, sizeof(tracking));  // I think this is more readable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM