我有一个项目使用我用cmake和Makefile编译 . 两个构建系统都创建相同的可执当我在它们两个上运行valgrind时,我得到了不同的确定丢失的字节值 .
main.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来查找内存泄漏 .
1 回答
valgrind给出的不同值与文件名相关联,我怀疑X11有内存泄漏 . 这解释了为什么两个可执行文件有不同的内存泄漏值,它们有不同的名称 . 回答