- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 allegro.cc 库编写简单的游戏,一开始我发现 valgrind 发现了内存泄漏。谁能告诉我我做错了什么?我不相信 allegro 有内存泄漏。代码:
#include <stdio.h>
#include <stdlib.h>
#include <allegro5/allegro.h>
int main(int argc, char** argv)
{
printf("start\n");
if (!al_init())
exit(EXIT_FAILURE);
ALLEGRO_DISPLAY *display = al_create_display(100, 100);
if (display == NULL)
exit(EXIT_FAILURE);
al_destroy_display(display);
al_uninstall_system();
return EXIT_SUCCESS;
}
我在 Linux Ubuntu 16.04 上运行它。
编译代码的命令:gcc -Wall test.c -o test.o $(pkg-config --libs allegro-5)
运行 valgrind 的命令:valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./test.o
Valgrind 日志:
LEAK SUMMARY:
==28629== definitely lost: 88 bytes in 2 blocks
==28629== indirectly lost: 2,668 bytes in 10 blocks
==28629== possibly lost: 0 bytes in 0 blocks
==28629== still reachable: 121,860 bytes in 675 blocks
==28629== suppressed: 0 bytes in 0 blocks
==28629== Reachable blocks (those to which a pointer was found) are not shown.
==28629== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==28629==
==28629== For counts of detected and suppressed errors, rerun with: -v
==28629== ERROR SUMMARY: 388 errors from 325 contexts (suppressed: 0 from 0)
最佳答案
valgrind 报告 2 个 block 中丢失了 160 个字节。一个是32字节,一个是128直接丢了。这是在带有 Allegro 5.2.5 的 Ubuntu 18.04 上。您可以在下面看到它们:
内存被报告为被 allegro 泄漏,但可能什么都没有。我会调查一下。你自己的代码没有任何问题,所以暂时不用担心内存泄漏。
==23579== 32 bytes in 1 blocks are definitely lost in loss record 386 of 1,647
==23579== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==23579== by 0x11B596A1: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579== by 0x67DBA07: glXCreateWindow (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
==23579== by 0x4F49B18: _al_xglx_config_create_context (xglx_config.c:572)
==23579== by 0x4F4328F: xdpy_create_display_locked (xdisplay.c:464)
==23579== by 0x4F43A57: xdpy_create_display (xdisplay.c:614)
==23579== by 0x4EB5D1D: al_create_display (display.c:53)
==23579== by 0x108978: main (gtktest.c:17)
==23579== 1,960 (128 direct, 1,832 indirect) bytes in 1 blocks are definitely lost in loss record 1,626 of 1,647
==23579== at 0x4C31B25: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==23579== by 0x11B7C93A: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579== by 0x11B59171: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579== by 0x11B5977C: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579== by 0x67DBA07: glXCreateWindow (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
==23579== by 0x4F49B18: _al_xglx_config_create_context (xglx_config.c:572)
==23579== by 0x4F4328F: xdpy_create_display_locked (xdisplay.c:464)
==23579== by 0x4F43A57: xdpy_create_display (xdisplay.c:614)
==23579== by 0x4EB5D1D: al_create_display (display.c:53)
==23579== by 0x108978: main (gtktest.c:17)
关于c++ Allegro 5 - 内存泄漏(valgrind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581121/
此功能的 allegro 5 版本是什么? texture_number = allegro_gl_make_texture_ex(AGL_TEXTURE_MASKED, my_bitmap, GL_
我得到了 Allegro 开发库,编写并编译了一个简单的应用程序,然后在我的计算机上运行它,它运行良好。我有一个 friend 测试过它,但是当双击它时它没有做任何事情。我认为问题是他没有安装Alle
我正在制作一款游戏,我不希望我的用户下载游戏文件夹以外的任何内容,只需双击即可运行。我可以在没有 Xcode 的情况下在 OSX 中编译我的代码,但当我尝试在另一台使用 OSX 的计算机上运行游戏时,
我想知道是否有人可以为这个错误指出正确的方向。 我正在学习使用Visual Studio 2010中安装的Allegro 5进行2D游戏编程。 我一直在关注一个教程系列,直到上一课为止,一切都很好。
我正在编写MOD播放器,尝试使用Allegro5原始流功能播放样本,但我无法弄清该流的确切初始化参数,以播放从mod文件加载的样本数据。 这就是我所拥有的: xf::ModLoader ml; ml.
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在使用 Allegro 5 用 C 语言开发 2D 游戏,其中敌人从固定位置向玩家当前位置发射射弹。我知道我必须根据玩家的位置和敌人的位置来计算假想三角形的正切。但是,如何让射弹根据该值沿着直线运
我正在按照命令使用 Allegro 做我的类(class)作业。 我需要捕获键盘上的按键事件,为此我使用了以下代码: al_wait_for_event(evento, &ev); if(ev.typ
我的一个 friend 试图在 Allegro 中重载一个用于比较颜色的相等运算符,但是它不起作用,他收到错误“运算符不匹配==”这是在 Color 类/结构之外重载的,重载的运算符函数如下所示: t
我正在制作一个程序,可以绘制在屏幕上弹跳的球。我目前正在研究绘制球的部分。 我的代码包括以下内容: BallEngine 类 - 管理所有 Allegro 函数/对象 BallManager 类 -
例如,如果我使用 Allegro 函数 ALLEGRO_DISPLAY *display=al_create_display(660, 660); 创建的屏幕上的 (100 , 100) 像素是红色或
谁能告诉我如何在 allegro 5 中打开一个浏览窗口,用户可以在其中选择文件,程序将使用该文件作为输入? 最佳答案 Allegro 5 具有这种文件对话框功能。 How to create dia
我是 allegro 和 c++ 的初学者。我正在尝试使用位图命令。我用这个简单的程序来测试它: #include BITMAP *red; int main(){ allegro_init
除了不断调用 remove_joystick() 然后 install_joystick 之外,有没有办法更新运行时插入的操纵杆数量?这被证明是非常慢的(从 60 FPS 到大约 5)。 只请 All
我正在接受有关将 allegro 库与 C++ 结合使用的培训,但我遇到了一个问题,在将大图像用于视差背景时,我会在屏幕上向下滚动时出现持续的负载/故障,使我所有的图像都闪烁了一下,有没有办法加载背景
我想在图形窗口中打印出我的鼠标坐标,当用户点击它时,应该会出现一条消息“clicked”。但问题是当用户点击它时,我收到了大约 5-10 条消息,而不是 1 条消息。我知道这可能是因为我松开按钮的速度
我正在学习面向对象编程和 allegro 库,所以我开始编写一个简单的菜单,但代码显示黑屏然后崩溃。 对于有关类外观、使用 header 拆分代码、代码的一般语法以及最重要的是找到代码无法解决的问题的
在 Allegro 中,我可以通过运行 将窗口设置为可调整大小 al_set_new_display_flags(ALLEGRO_RESIZABLE); 之前 display = al_create_
大家好,我正在制作一个 C++ 游戏,我试图将位图加载到我的游戏屏幕上,但是当我这样做时,图像没有出现,只有一个黑色的正方形,如下所示: 我目前正在使用以下代码: BITMAP *buffer = c
我在播放样本 Allegro 5 时遇到了问题。当我播放样本时,我无法再次播放该样本,直到它完成播放。有时,如果另一个不同的样本正在播放,它也不会播放样本。 无论如何要解决这个问题? 我用“声音”类播
我是一名优秀的程序员,十分优秀!