【发布时间】: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::thread或std::async而不是SDL_CreateThread,这样可以正常工作并且顺便可以让您免于void *转换。 -
我听说 STL 线程在某些平台上很慢,所以我不使用它们。
标签: multithreading pointers sdl-2 heap-corruption