[英]My colleague likes to initialize struct using memset, how I can persuade him not to do so?
[英]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.