簡體   English   中英

返回一個char指針(內存泄漏)

[英]Return a char pointer (memory leak)

我的硬件代碼中有一個函數,它返回一個char *:

char* getText();

我想知道這是如何在系統中實際工作的。 在我的getText function ,我通過alloc to a char*分配了一個內存空間。 然后,我只是通過該函數返回它。

現在,我通過調用char* receive=getText()檢索另一個函數,並在使用它后刪除了receive。 我可以檢查這是否會導致任何內存泄漏?

因為我假設您使用GCC編譯的Linux系統,您可以使用valgrind來運行您的程序並保證找到任何泄漏,甚至可能發生的內存泄漏。

要在這種特定情況下更直接地回答您的問題,如果您可以保證在完成使用后免費()接收,那么您將不會有內存泄漏。 但是,如果您忘記free()接收然后重新分配要接收的內容,那么就會考慮內存泄漏。 您已經丟失了負責釋放的資源的句柄,並且無法再釋放它。

通常,您的代碼非常類似於C而不是C ++的處理方式。 返回一個std :: string會更像C ++。 關於動態分配,malloc()和free()也是進行動態分配的“C方式”。 new和delete是進行動態分配的C ++方式。

正如人們建議的那樣,使用std::string而不是類似C的字符串。 std::string自動管理自己的內存,並具有豐富而安全的界面。 字符串默認是可移動的,因此按值返回不會有任何性能損失。

但是如果你想返回一個指針(換句話說,你想要為字符串返回一個“句柄”,而不是字符串本身),考慮使用智能指針而不是原始指針。 智能指針是無泄漏的,因為它的內存標記基於RAII 返回原始指針的問題是函數的接口沒有指定誰將解除分配字符串。 調用者,或函數使用的經理/工廠?

如果使用unique_ptr作為返回類型,則指定在調用者停止使用其句柄時將刪除結果字符串。 另一方面,如果使用shared_ptr,則指定該字符串由函數使用的內部管理器/工廠管理。

智能指針的要點是你不必擔心字符串生命周期/內存magnament

暫無
暫無

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

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