【问题标题】:SDL2 Threads C++ pointer corruptionSDL2 线程 C++ 指针损坏
【发布时间】:2015-07-16 14:58:16
【问题描述】:

所以,我遇到了以下问题,这可能看起来很奇怪或过于简单。这段代码 sn-p 演示了我的问题。

#ifdef __cplusplus
    #include <cstdlib>
#else
    #include <stdlib.h>
#endif

#include "SDL2/SDL.h"
#include <iostream>
using namespace std;

int doSTH(void* data){

    int* data2 = (int*)data;
    cout << data2 << endl;

    return 0;
}

int main(){

    SDL_Init(SDL_INIT_EVERYTHING);
    int* data = new int(2);
    cout << data << endl;
    SDL_CreateThread(doSTH, "sth", (void*)data);
    SDL_Delay(1);
    delete data;
    SDL_Quit();
}

输出是

0x2479f40
0x400c05

这意味着我调用的函数没有得到我给它的指针,我错过了什么吗?

我正在使用 Linux Ubuntu 14.04、g++ 4.8 和代码块。 请告诉我是否应该提供更多信息。 提前致谢。

【问题讨论】:

  • 据我所知,这不应该发生。使用std::threadstd::async 而不是SDL_CreateThread,这样可以正常工作并且顺便可以让您免于void * 转换。
  • 我听说 STL 线程在某些平台上很慢,所以我不使用它们。

标签: multithreading pointers sdl-2 heap-corruption


【解决方案1】:

没关系,不知何故,SDL2 的构建被搞砸了。我刚刚卸载了 libx11-dev,重新启动,然后重新安装了 libsdl2-dev,现在它可以正常工作了。

【讨论】:

  • 仅供参考:我刚刚通过 playonlinux 安装了一个新的 wine 版本,我的 libsdl2 搞砸了,以上不再是解决方案了
猜你喜欢
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多