c++ - 临时参数数组的内存泄漏

标签 c++

void setCString(char* s){
   char* t = new char[strlen(s) + 1];
   strcpy(t, s);
   delete[] m_cstring;   //del old contents from member var
   m_cstring = t;
}

rA.setCString("Bii");

这不是内存泄漏吗? “Bii”在内存中创建,指向它的指针被传递给函数。在函数中进行了新的分配,并将 s 数组的内容复制到新的 t 数组。

当函数结束时,s 超出范围并被删除,但 s 指向的初始原始数组未被删除。

如果这是内存泄漏,如何修复(将 c 字符串作为数组...没有 std::string)?

最佳答案

“丢失”指向字符串文字的(可能是唯一的)指针不被视为内存泄漏,因为不能“释放”字符串文字及其“分配的内存”。实际上释放字符串文字是未定义的行为。所以在常识上没有“泄漏”;只是一个可能不再使用的字符串文字。

关于c++ - 临时参数数组的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48998586/

相关文章:

c++ - 如何从 Windows 剪贴板读取位图

C++:从 x509v3 证书中检索主题替代名称

c++ - 如果有两个指向同一数据结构的指针,其中一个被删除,如何检查另一个指针是否存在?

c++ - 来自指针的 boost::shared_ptr

c++ - 如何在 Windows 10 操作系统上使用 Bazel 调试 C++ 代码

c++ - Xcode 找不到目标文件

c++ - 获取非侵入式 boost 序列化 C++ 的私有(private)数据成员

c++ - 使用 floor 从 double 中获取整数

c++ - 交叉递归规则声明

c++ - 使用 emacs ebrowse 时无法切换到另一个类