首页 > 解决方案 > SDL_GetError() 在 macOS 上返回一个未记录的错误

问题描述

所以我正在为 SDL2 开发一组包装实用程序,但遇到了一个奇怪的问题。每当我SDL_GetError在帧结束时轮询错误时,如果我触摸触控板,我会收到以下奇怪的错误消息Unknown touch device id -1, cannot reset:引号中的此错误仅在 google 上显示一个结果,这似乎是 macOS 的一个问题,尽管只有一次出现很难确定。

这是一个最小的可重现示例:

#include <SDL2/SDL.h>
#include <stdio.h>

int main() {
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window* window = SDL_CreateWindow("Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100, SDL_WINDOW_SHOWN);
    
    while(1) {
        SDL_Event e;
        while(SDL_PollEvent(&e))
            switch(e.type) {
                case SDL_QUIT: {
                    SDL_DestroyWindow(window);
                    SDL_Quit();

                    exit(0);

                    break;
                }
            }

        const char* err = SDL_GetError();
        if(err[0]) {
            printf("%s", err);
            exit(-1);
        }
    }
}

我知道这是一个奇怪的问题(并且可能无法回答),所以我非常感谢任何答案或建议。

我正在使用运行 macOS Catalina(10.15.6) 的 MacBook Pro 13 英寸 2012 年中。使用 clang 12.0.0 编译

编辑:我已经下载了 SDL2 源代码来查找错误,根本原因似乎是这个函数:

static int
SDL_GetTouchIndex(SDL_TouchID id)
{
    int index;
    SDL_Touch *touch;

    for (index = 0; index < SDL_num_touch; ++index) {
        touch = SDL_touchDevices[index];
        if (touch->id == id) {
            return index;
        }
    }
    return -1;
}

我正在寻找触发此错误的确切原因,并将为以后遇到此错误的任何人更新此帖子,并向 SDL 开发团队提交错误报告

标签: csdlsdl-2

解决方案


推荐阅读