我有一个使用 cmake 和 Makefile 编译的项目。 两个构建系统都创建相同的可执行文件。 当我在它们两个上运行 valgrind 时,我得到不同的明确丢失的字节值。
主.cc
#include <GameWindow.h>
#include <Video.h>
#include <iostream>
#include <GL/gl.h>
using namespace ugen;
char read()
{
std::cin.ignore(std::cin.rdbuf()->in_avail());
return std::cin.get();
}
int main()
{
Video video;
GameWindow win("Window", 0, 0, 640, 480, SDL_WINDOW_SHOWN|SDL_WINDOW_OPENGL);
std::cin.sync_with_stdio(false);
glClearColor(0.0f, 0.0f, 0.4f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
win.updateDraw();
read();
glClearColor(0.0f, 0.5f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
win.updateDraw();
read();
return 0;
}
视频类启动 SDL2。 GameWindow 类创建 SDL_Window 上下文。 Makefile 版本从 SDL_TLS 中泄漏了 20 个字节。 CMake 版本泄漏了 80 个字节,即使它来自相同的代码并且是 Makefile 二进制文件的精确拷贝。 我使用 valgrind 来查找内存泄漏。
最佳答案
valgrind 给出的不同值与文件名相关联,我怀疑 X11 存在内存泄漏。这解释了为什么这两个可执行文件具有不同的内存泄漏值,它们具有不同的名称。 已回答
关于c++ - Valgrind 为同一个应用程序提供不同的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32466099/