- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下简单的 SDL 代码:
#include <SDL.h>
#include <stdbool.h>
#include <stdio.h>
// helpers
bool init(SDL_Window **win, SDL_Surface **surf) {
int const width = 800;
int const height = 600;
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
return false;
}
*win = SDL_CreateWindow("Picture test",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
width, height, 0);
if (*win == NULL) {
fprintf(stderr,
"Unable to create window: %s\n",
SDL_GetError());
return false;
}
*surf = SDL_GetWindowSurface(*win);
return true;
}
bool load_media(SDL_Surface **surf) {
*surf = SDL_LoadBMP("./sample.bmp");
if (*surf == NULL) {
fprintf(stderr, "Unable to load data: %s\n", SDL_GetError());
return false;
}
return true;
}
void close(SDL_Window **win, SDL_Surface **surf) {
SDL_FreeSurface(*surf);
SDL_DestroyWindow(*win);
SDL_Quit();
}
int main()
{
SDL_Window *win;
SDL_Surface *surf;
SDL_Surface *img;
if (!init(&win, &surf)) {
return EXIT_FAILURE;
}
if (!load_media(&img)) {
return EXIT_FAILURE;
}
SDL_BlitSurface(img, NULL, surf, NULL);
SDL_UpdateWindowSurface(win);
SDL_Delay(2000);
close(&win, &img);
}
我的代码总是在 close
时出现段错误(根据 GDB,段错误的起源是行 SDL_FreeSurface(*surf)
)。更奇怪的是,如果我用它的定义替换对 close
的调用,这仍然会在完全相同的地方出现段错误。具体来说,如果我将 close(&win, &img)
替换为:
SDL_FreeSurface(img);
SDL_DestroyWindow(win);
SDL_Quit();
代码仍然在完全相同的地方出现段错误,即使那个函数甚至没有被调用。只有当我删除整个 close
函数时,它才能正常工作。我完全不知道是什么原因造成的。
最佳答案
请重命名您的函数
void close(SDL_Window **win, SDL_Surface **surf)
因为 close
是一个标准的 C 库函数。
关于c - 来自 SDL_FreeSurface 的奇怪段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495898/
我有一个类Block这叫SDL_FreeSurface(surface)在析构函数中。在main()当我创建 Block 的一个实例时,该对象正常运行,但当我在另一个类中使用它时 Control ,
我在开发的游戏中遇到严重的内存使用问题。我让它一直运行,看到它使用了超过 1.5 GB 的 ram,而最初使用的是 30 MB。我已将主要原因确定为 2 个函数,粘贴在下面。通过研究这个问题,我得出的
当使用 SDL_Surface 处理图像时,我遇到了在同一指针上运行 SDL_FreeSurface(SDL_Surface *) ( doc ) 两次会产生分割的问题过错。 我明白为什么会发生这种情
我有以下简单的 SDL 代码: #include #include #include // helpers bool init(SDL_Window **win, SDL_Surface **s
我正在使用 PySDL2,在阅读示例时,我注意到这些示例调用 sdl2.SDL_FreeSurface(image)。我想知道,如果我不使用 FreeSurface,是否会造成内存泄漏?垃圾收集不处理
我在 SDL 中设置了一个小型射击游戏作为我自己的教程。我有一个射弹结构 struct projectile { SDL_Surface* surface; int x; in
我在编译我的程序时遇到了问题。 首先,这是我正在使用的makefile: LFLAGS = `sdl-config --cflags` `sdl-config --libs` -lSDL -lSD
我正在通过在线教程学习 SDL,发现一个我不明白的问题。根据本教程,始终正确释放应用程序使用的资源是一种很好的做法。就我而言,我想释放 SDL 表面使用的内存。 但是,如果我在调用该函数之前没有将它将
我有内存泄漏的问题。在 SDL_FreeSurface 函数之后,我的应用程序中的 RAM 使用量没有减少。 代码: //10 000 KB RAM SDL_Surface * surface = S
我是一名优秀的程序员,十分优秀!