繁体   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