c++ - Valgrind 为同一个应用程序提供不同的内存泄漏

标签 c++ valgrind

我有一个使用 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/

相关文章:

C++ 构造函数错误- token ')' 之前应为 '<'

c++ - 如何获得CImg像素的位深度?

c++ - 初始化模板类的静态模板化成员

c - C 中 replaceAll 中的内存泄漏

C++设计模式以避免固定大小数组的模板

c++ - 使用 libdrizzle 作为异步 mysql 连接器

c++ - 这个 Valgrind 错误的原因是什么?

c - 无法在我的 strtok 程序中正确分配和释放内存

c - Valgrind 释放 AVL 树时出错

c - valgrind 显示内存较大的 strtok 错误