You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将TCP套接字加入SDL_NET套接字集,出现内存访问违例错误

解决SDL2_net套接字集访问违例的问题

你遇到的0xC0000005访问违例,核心原因是错误地将赋值操作=当成了比较操作==,导致后续使用了空的套接字集执行操作,触发了内存访问错误。

咱们拆解代码里的问题点:

  • 代码中的if (socketSet = NULL)是赋值逻辑,不是判断相等!它会直接把NULL赋值给socketSet,同时这个表达式的结果是NULL(逻辑假),导致你跳过了错误处理分支,直接拿着空套接字集去执行后续加入套接字的操作——SDLNet的函数试图访问空指针指向的内存,自然就触发了访问违例。
  • 另外,SDLNet_GetError这里少了调用括号,应该写成SDLNet_GetError(),否则你打印的是函数指针,不是实际的错误信息。

修复后的代码示例:

SDL_Init(SDL_INIT_EVERYTHING);
SDLNet_Init();
IPaddress serverIP;
SDLNet_SocketSet socketSet = SDLNet_AllocSocketSet(10);

// 用==做相等判断,而不是=赋值
if (socketSet == NULL) {
    // 调用SDLNet_GetError()获取正确的错误信息
    printf("Failed to create the socket set: %s\n", SDLNet_GetError());
}

// 后续加入套接字的操作,必须确保socketSet不为空再执行
if (socketSet != NULL) {
    // 示例:SDLNet_AddSocket(socketSet, your_client_socket);
}

// 程序结束别忘清理资源
// SDLNet_Quit();
// SDL_Quit();

额外小提醒:

  • 你没写完的SDLNet_ResolveHost调用,要注意参数逻辑:第二个参数传NULL是绑定本地地址,第三个参数需要填写正确的端口号。
  • 初始化SDL和SDLNet后,记得在程序退出时调用对应的退出函数做资源清理。

内容的提问来源于stack exchange,提问作者David Guirguis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:08:26