我有一个极端的问题.
我已经在游戏上工作了大约两年(20000多行代码),最近我注意到了大量的内存泄漏.问题是我无法追踪他们中的每一个,因为我的游戏太大了......
我已经四处搜索并注意到CppCheck在我的情况下会很有用,但问题是因为我使用的是Windows,所以我不能使用CppCheck(仅适用于linux).
我想知道是否有一个库或插件是CppCheck等效的Windows,或者可能是一种在Windows上使用CppCheck的方法.
我提出的所有可能性,以及其他问题的解决方案(例如使用std :: deque的智能指针等)都意味着我的程序很小或更合适:重写我的整个程序,就像我一样 - 真的 - 不想做...
IDE:代码块10.05
编译:MinGW 3.81 GCC 4.4.1
我使用realloc来调整分配的内存:
char **get_channel_name(void)
{
char **result;
int n;
result = (char **) 0;
for (elem = snd_mixer_first_elem(handle), n = 0; elem; elem = snd_mixer_elem_next(elem)) {
if (!snd_mixer_selem_is_active(elem))
continue;
if (snd_mixer_selem_has_playback_volume(elem) &&
snd_mixer_selem_has_playback_switch(elem) &&
snd_mixer_selem_has_capture_switch(elem)) {
if (result == (char **) 0)
result = (char **) malloc(sizeof(char *));
else
result = (char **) realloc(result, sizeof(char *) * (n + 1)); /* nulled but not freed upon failure */
result[n++] = strdup(snd_mixer_selem_get_name(elem));
}
}
if (result == (char **) 0)
return NULL; …Run Code Online (Sandbox Code Playgroud) 是否允许C++编译器或链接器(通过任何C++标准)删除未使用的方法?似乎允许编译器删除未使用的静态函数,允许链接器删除未使用的函数.但我没有找到任何信息类似于方法的信息.当方法是虚拟的时,这真的很有趣.
我用cppcheck检查了我的代码,它说我的char outStr[256]字段应该在构造函数的初始化列表中初始化.
warning: Member variable 'outStr' is not initialized in the constructor.
Run Code Online (Sandbox Code Playgroud)
此字段仅用于此方法:
const char* toStr(){
sprintf(outStr,"%s %s", id.c_str(), localId.c_str());
return outStr;
}
Run Code Online (Sandbox Code Playgroud)
添加c("")到初始化列表是否更好?还是cppcheck错了?或者还有其他方法可以解决这个问题吗?