gpt4 book ai didi

c++ - 在c++中使用 "char*"变量的查询

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:57 25 4
gpt4 key购买 nike

我在我的 cpp 代码中使用 char* 变量。我的问题是,我们应该使用 new() 还是 malloc() 为 char* 变量分配内存?

std::string str;
char* chrarray = NULL;
chrarray = str.c_str();

谁能告诉我上面的代码片段是否有内存泄漏?

使用此类变量的最佳做法是什么?

char* error;
error = dlerror();

我在 dlopen 的 linux 手册页中看到了上面的代码。为什么没有为错误变量分配内存?

最佳答案

当您分配内存或承担以前分配的内存的责任并且在您不再需要时未能取消分配该内存时,您就会发生内存泄漏。

在您的示例中,您收到指向已分配结构的指针,但您不承担释放该内存的责任。

c_str() 的情况下,您将获得一个指向字符串内部存储器的指针。如果该字符串超出范围并被销毁,则该指针不再有效。它不需要被释放,因为你不拥有它。可能还有其他因素会使您的指针无效,因此在使用此类指针时您需要非常小心。

更好的写法是:

const char* chrarray = str.c_str();

无需将指针初始化为 NULL,然后立即将其重写为其他内容。

第二种情况描述了很多旧 C 库中发生的情况,它们将返回指向您不拥有的共享内存的指针。其中一些不是线程安全的,因为所有线程都将引用同一个 block ,因此在接收指针时请仔细阅读文档。如果你要取得它的所有权,你必须使用正确的方法销毁,否则你会泄漏。

关于c++ - 在c++中使用 "char*"变量的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25419818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com