使用字符串参数创建SDL_thread

时间:2017-04-18 04:00:08

标签: c++ multithreading sdl

我正在尝试使用字符串作为输入来创建多线程程序。使用SDL_CreateThread,我尝试构建一个简单的实现,如下所示:

#include <stdio.h>
#include <string>
#include <SDL_thread.h>

int threadFunction(void* data) {
    std::string* parameter = static_cast<std::string *>(data);
    printf("Thread data: %s\n", parameter);
    return 0;
}

int main(int argc, char const *argv[]) {
    SDL_Thread* threadID = SDL_CreateThread(threadFunction, "test", (void*)"Enter string here");
    SDL_DetachThread(threadID);
    return 0;
}

它工作得很好但是每当我将一个整数放入字符串(例如"123",而不是直接编号123)然后尝试解析线程中的整数时,我得到一个{ {1}}。我的尝试是Segmentation Fault: 11

任何人都可以解释原因吗?是否与int i = std::stoi(parameter->c_str());

的投射有关

1 个答案:

答案 0 :(得分:4)

好的,您首先将指针传递给char (void*)"Enter string here"数组作为线程参数,然后将此指针强制转换为指向字符串static_cast<std::string *>(data)的指针。 :: std :: string是一个类,在任何情况下都不能执行这样的强制转换。此外,您在printf("Thread data: %s\n", parameter)时隐式地将指向字符串的指针强制转换为指向字符数组的指针,但这不会引爆错误,因为它确实指向了char数组,而不是字符串。

int threadFunction(void* data) {
const char * parameter = static_cast< const char * >(data); // correct cast