SDL_Init 中存在大量内存泄漏

2024-01-16

EDIT:更新了一些新信息(粗体)。此外,代码和 Valgrinds 输出也已更新。

我最近开始使用 SDL2 作为我的图形库。 开发了一些东西后,我决定运行 Valgrind 并发现我正在泄漏内存......大量内存。

缩小范围后我编译了这段代码(In C):

#include <SDL2/SDL.h>

int main(int argc, char** argv)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_QuitSubSystem(SDL_INIT_EVERYTHING);
    SDL_Quit();

    return 0;
}

这是生成文件:

CC = gcc
CCFLAGS = -Wall -o0
LDFLAGS = -lSDL2
SOURCES= main.c
OBJECTS=$(SOURCES:.c=.o)
EXE = Test

.PHONY:
all: $(OBJECTS)
    $(CC) $(OBJECTS) $(CCFLAGS) $(LDFLAGS) -o $(EXE)

clean:
    rm $(OBJECTS) $(EXE)

并得到这个 Valgrind 错误:

==30933== Memcheck, a memory error detector
==30933== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==30933== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==30933== Command: ./Test
==30933== 
==30933== 
==30933== HEAP SUMMARY:
==30933==     in use at exit: 308,407 bytes in 559 blocks
==30933==   total heap usage: 9,346 allocs, 8,787 frees, 2,502,489 bytes allocated
==30933== 
==30933== LEAK SUMMARY:
==30933==    definitely lost: 197,226 bytes in 6 blocks
==30933==    indirectly lost: 6,272 bytes in 8 blocks
==30933==      possibly lost: 0 bytes in 0 blocks
==30933==    still reachable: 104,909 bytes in 545 blocks
==30933==         suppressed: 0 bytes in 0 blocks
==30933== Rerun with --leak-check=full to see details of leaked memory
==30933== 
==30933== For counts of detected and suppressed errors, rerun with: -v
==30933== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 1)

我环顾四周,看到很多人抱怨 SDL 中的内存泄漏,但它们都很小(大约 16 字节,而不是 200,000!)。另外,我检查了互联网上的其他示例,尝试在我的计算机上运行它们,它们都有相同的泄漏(我假设是 SDL_Init)。

我正在 Ubuntu 13-64 位上运行。


是的,SDL 中存在一些泄漏,但这些泄漏可能来自不同的地方,其中一些实际上并不是 SDL 的错。

例如,我的显卡驱动程序 (nvidia) 泄漏了 10Mb 的内存。 X11 也因一些重大漏洞而闻名。我不会太担心,有些事情你无法控制。

在您的具体情况下,我将使用标志运行 valgrind--leak-check=full --track-origins=yes --show-reachable=yes,查看泄漏是否确实来自 SDL 并在中发布有关它的错误http://bugzilla.libsdl.org http://bugzilla.libsdl.org如果尚未报告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDL_Init 中存在大量内存泄漏 的相关文章

  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver

随机推荐

  • 上传符号文件中的 Xcode 错误

    我已遵循 Firebase 崩溃报告集成的正确步骤 但仍然有这样的错误 用户 satish Desktop firebase crash Pods FirebaseCrash upload sym 174 错误 请确保您已按照以下步骤操作
  • 使http客户端同步:等待响应

    我有一些文件要上传 但有些文件失败 因为帖子是异步的而不是同步的 我正在尝试将此呼叫作为同步呼叫 我想等待回复 我怎样才能使这个调用同步 static async Task
  • Visual Studio Online 构建失败 - 本地工作

    我升级到VS2015 MVC更新到5 0 我能够在本地 PC 上成功构建 但是当我签入 Visual Studio Online 并进行 CI 构建时 它失败了 命名空间 System Web 中不存在类型或命名空间名称 Mvc 您是否缺少
  • Tomcat:如何在Java中获取安全端口号?

    我想在我的一个不安全页面中嵌入一个指向我的应用程序安全页面的链接 安全 tomcat 端口在 server xml 文件中配置 在某些部署中 它是 443 8443 等 所以我需要的是一种从 tomcat 配置读取安全端口以在链接中使用它的
  • iOS7 状态栏就像原生天气应用程序

    有谁知道如何从原生 iOS7 天气应用程序中重现类似的效果 基本上 状态栏继承了下面视图的背景 但内容不显示 此外 仅当某些内容位于下方时 才会在状态栏 20 像素高度之后绘制 1 像素线 最好的办法是通过视图的clipSubview来实现
  • 如何在 lldb 中实时运行脚本上转储 PHP 回溯?

    我正在玩LLDB 调试器 https en wikipedia org wiki LLDB debugger 我做了以下实验 运行 PHP 脚本 php r sleep 1000 or php r function r sleep 1000
  • 如何更改 Glassfish 的默认起始页?

    目前 当我输入 web 应用程序的 URL 例如 http abc edu mywebapp 时 我会进入 web 应用程序的登录页面 当我输入 http abc edu 时 我会进入 GlassFish 信息页面 我怎样才能做到这一点 当
  • WSL 上的 Docker 不会绑定挂载 $HOME

    我在 WSL Linux 的 Windows 子系统 Ubuntu 16 04 上使用 Docker 时遇到了最奇怪的情况 我正在尝试绑定挂载 home username 要不就 HOME为了方便起见 作为容器中的卷 并且我没有在容器中查找
  • error.add_to_base 的 Rails3 版本是什么?

    我想在 Rails 3 中编写自定义验证 但是以下这个例子 http paulsturgess co uk articles show 33 how to write custom validation in ruby on rails I
  • 如何修复 FilePond 拖放中的“未捕获的引用错误:FilePond 未定义”

    我正在尝试使用 FilePond 在我的网站上实现拖放功能 我已经下载了 filepond css 和 js 文件并正确附加它们 每当我尝试完成设置时 我都会收到 未捕获的引用错误 FilePond 未定义 的消息 extends main
  • 更改正在运行的系统上的 Vagrant 端口转发

    我有一个 Vagrant 系统正在运行 我想对其进行更改 只需更改其中一个转发规则即可 From 这一页 http vagrantup com docs getting started ports html 转发端口在期间应用vagrant
  • Java 8 中的新 java.security.AccessControlException

    以前工作的网络代码正在抛出java security AccessControlException在完全沙盒的 Java 中applet Can t get socket 2255 java security AccessControlEx
  • “您尝试通过调用 firebase.app() 来使用 Android 项目上未安装的 Firebase 模块。”

    我跟着https rnfirebase io management workflow https rnfirebase io managed workflow有关如何安装 Firebase 的指南 我创建了一个新的 Expo 应用程序 np
  • 如何设置 Apache 返回 204 代码?

    如何设置 Apache 对某个 URL 返回 204 无内容 而不是 404 代码 将 Redirect 文档与 RedirectMatch 文档放在一起 我们发现是的 我们可以发回自定义 204 下面是一个简单的示例 它对任何与 foo
  • 错误“在 Visual Studio 中找不到元数据文件 '...\Release\project.dll'”

    最近我开始随机收到此消息 在 Visual Studio 中找不到元数据文件 Release project dll 我有一个包含多个项目的解决方案 当前的构建模式是 调试 并且所有项目的配置都设置为 调试 但是当我尝试运行主项目时 有时它
  • 基于maven配置文件的黄瓜标签

    我正在尝试基于变量 tags 运行特定的 Gherkin 场景 如果可能的话 例如 如果我的配置文件是 dev 我想运行场景 1 如果配置文件是 qa 我想运行场景 2 我可以在我的 java 类中获取配置文件值 我还可以在命令行中传递标签
  • Spring Cloud Contract 从 Artifactory 检索存根时出现问题

    我对两个消费者和一个生产者进行了离线工作正常的测试 但是当我更改它们以从 Artifactory 检索存根时 消费者测试失败 这是离线工作的代码 RunWith SpringRunner class SpringBootTest class
  • SQL 不同的逗号分隔列表

    我正在尝试使用以下查询在表中创建逗号分隔的名称列表 DECLARE listStr VARCHAR MAX SELECT listStr COALESCE listStr Name FROM Production Product SELEC
  • linux下如何将PE(Portable Executable)格式转换为ELF

    将 PE 二进制文件转换为 ELF 二进制文件的最佳工具是什么 以下是这个问题的简要动机 假设我有一个简单的 C 程序 我使用 Linux 的 gcc 编译它 这给出了 ELF 并使用 Windows 的 i586 mingw32msvc
  • SDL_Init 中存在大量内存泄漏

    EDIT 更新了一些新信息 粗体 此外 代码和 Valgrinds 输出也已更新 我最近开始使用 SDL2 作为我的图形库 开发了一些东西后 我决定运行 Valgrind 并发现我正在泄漏内存 大量内存 缩小范围后我编译了这段代码 In C