内联函数的内存泄漏
memory leak of inline function
我有一个内联函数定义如下:
inline string Change(char *pointer) {
string str;
char temp[32] = "";
sprintf(temp,"%c:%c:%c:%c:%c:%c", //line 1
temp[0],temp[1],temp[2],
temp[3],temp[4],temp[5],
);
str = temp;
return str;
}
当我使用内存泄漏工具检查它时,它指示第1行(标记在上面)是内存泄漏。以上代码的问题是什么?
我创建了完全可编译的示例:
#include <string>
#include <iostream>
#include <cstdio>
std::string Change( char * ) {
std::string str;
char temp[32] = "";
sprintf(temp,"%c:%c:%c:%c:%c:%c", //line 1
temp[0],temp[1],temp[2],
temp[3],temp[4],temp[5]
);
str = temp;
return str;
}
int main()
{
char a[]={"abaaaaa2"};
std::cout<<Change(a)<<std::endl;
}
在valgrind下运行时,我没有检测到泄漏:
==16829==
==16829== HEAP SUMMARY:
==16829== in use at exit: 0 bytes in 0 blocks
==16829== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==16829==
==16829== All heap blocks were freed -- no leaks are possible
==16829==
==16829== For counts of detected and suppressed errors, rerun with: -v
==16829== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 8)
如果你想知道泄漏的确切位置,你可以使用插件。你可以选择一个对你方便的插件。对我来说,它是deleaker。这个领域有很多发展!!
如果你想知道泄漏的确切位置,你可以使用插件。你可以选择一个对你来说方便的插件。对我来说,它是deleaker。这个领域有很多发展!!
谢谢。
上面的代码是没有泄漏的。该工具可能在以下两种情况下指示泄漏:
- 从函数返回的字符串被分配给另一个字符串变量,并且在工具运行之前该变量没有被销毁-然后从技术上讲,字符串主体仍然在此时被分配并且工具报告它
- 字符串主体分配器缓存字符串主体块以供将来重用,并且在分配器释放所有缓存块之前运行该工具-然后从技术上讲,字符串主体被分配并工具报告它。
工具出现故障;这里没有内存泄漏
内存泄漏仅发生在使用new
或new []
获取空闲存储内存并且不通过分别调用delete
或delete[]
来释放它时。
std::string
在内部分配自由,但你返回它作为返回类型,这是不泄漏内存。
你所展示的代码没有使用new
或new []
,所以在你所展示的代码中没有内存泄漏。你使用的工具似乎有误导作用。或者你需要向我们展示你的真实的代码来得到一个更好的答案。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏