|
|
1
9
其他是正确的,你正在泄漏,因为你在呼叫出口。显然,泄漏不是在堆栈上分配的字符串,而是由字符串在堆上分配的内存。例如:
不会导致valgrind报告泄漏。 泄漏是可能的(而不是确定的),因为有一个指向堆上分配的内存的内部指针。基本字符串对此负责。从我机器上的标题:
它们的关键是_M_p不指向堆上分配的内存的开始,而是指向字符串中的第一个字符。下面是一个简单的例子:
这将报告valgrind可能有泄漏。如果你注释掉我移动的行,m_data valgrind将报告“仍然可以到达”。如果您取消注释我将m_data设置为0的行,您将得到一个明确的泄漏。 山谷 documentation 有更多关于可能泄漏和内部指针的信息。 |
|
2
11
打电话
换句话说,不管是否泄漏,你不应该真的在乎。当你打电话
很明显,它会泄露资源,因为您永远不会让字符串的析构函数运行,无论它如何管理这些资源。 |
|
|
3
4
当然,这个“泄密”,通过
至于你的问题
|
|
4
1
gcc STL有用于容器和字符串的专用内存池。你可以关掉这个;看看valgrind FAQ |
|
|
5
1
我将避免使用Ext(),我看不出使用这个调用的真正原因。不确定它是否会导致进程立即停止而不首先清理内存,尽管valgrind看起来仍在运行。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |