我有一个内联函数定义如下:
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行(上面标记)是内存泄漏。 上面的代码有什么问题?
答案 0 :(得分:2)
我创建了完全可编辑的示例:
#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)
答案 1 :(得分:2)
如果您想知道泄漏的确切位置,可以使用插件。你可以选择一个方便你的插件。对我来说,它是dekeraker。这个领域有很多发展!!
答案 2 :(得分:2)
如果您想知道泄漏的确切位置,可以使用插件。你可以选择一个方便的插件&gt;对我来说,它是dekeraker。在&gt;这个领域有很多发展!!
感谢。它帮助了我。
答案 3 :(得分:1)
上面的代码是无泄漏的。该工具可能表明两种情况都有泄漏:
答案 4 :(得分:0)
只有在使用new
或new []
获取免费商店内存并且不分别通过调用delete
或delete[]
将其释放时,才会发生内存泄漏。
std::string
在freestore上进行内部分配,但是你将它作为返回类型返回,而不是泄漏内存。
您展示的代码不使用new
或new []
,因此您显示的代码中没有内存泄漏。
您使用的工具似乎具有误导性。或者您需要向我们展示您的真实代码以获得更好的答案。
答案 5 :(得分:0)
工具出现故障;那里没有内存泄漏。