做gtk2.0程序在扫描目录过程里面,发现每次扫描目录内存都增加0.3MB,造成内存泄漏。屏蔽一些代码,最后发现在一个函数里执行的时候造成内存泄漏
我注意到我转换字符的时候是这样写的。
gtk的大多数返回字符串指针的函数,都是需要手动释放的。但是这种形式没有。引起了我的警觉。我询问了AI,它果然说这种办法有问题。是使用g_locale_to_utf8之后没有释放内存
修改后使用这种形式转换就正常了。
gchar *utf8Char = g_locale_to_utf8(dirPath.c_str(),-1,0,0,0);
std::string dirPathUTF8 = utf8Char;
g_free(utf8Char);
这种写法的来源是什么呢。一些程序员为了方便直接调用g_locale_to_utf8的输出作为字符串使用,或者他们自己都不知道需要手动释放。我看了网上一些人这种用法也直接拿来用,没有得到任何释放内存的提示。所以就默认用了。
说实话我现在只相信AI。