ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c – SDL_Init中的大内存泄漏

2019-08-25 04:08:23  阅读:358  来源: 互联网

标签:sdl-2 c memory-leaks


编辑:更新了一些新信息(Bold’ed).此外,代码和Valgrinds输出已更新.

我最近开始使用SDL2作为我的图形库.
在开发了一些东西之后,我决定运行Valgrind并发现我正在泄漏记忆……很多记忆.

缩小范围后,我编译了这段代码(在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;
}

这是make文件:

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).

我在Ubuntu13-64Bit上运行.

解决方法:

是的,SDL中存在一些泄漏,但它可能来自不同的地方,其中一些并不是SDL的错.

例如,我的视频卡驱动程序(nvidia)泄漏了大量的10Mb内存. X11也因一些大泄漏而闻名.我不会那么担心,有一些你无法控制的事情.

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

标签:sdl-2,c,memory-leaks
来源: https://codeday.me/bug/20190825/1714995.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有