从成员函数创建线程时出现分段错误(核心转储)错误

时间:2015-08-17 11:02:33

标签: c++ linux multithreading segmentation-fault

有谁知道为什么会导致分段错误?

int main ()
{
    udp_client *client = new udp_client("192.168.160.128", 2500);
    client->mysetsockopt("af");
    client->askForFileAndID();
    client->getFileSize();

//this line causes the seg fault error
    std::thread t1(&udp_client::sendFiletoServer, client);


    return 0;
}

2 个答案:

答案 0 :(得分:2)

分段错误只能在运行时发生,如果您有分段错误,则编译并链接您的程序。问题可能是您的程序在创建thread后完成执行。尝试加入thread t1。

添加: t1.join();

从主回来之前。

答案 1 :(得分:0)

您需要与pthreads链接。要完成此操作,只需将-pthread添加到编译标志中即可。

请注意,如果您想要静态链接(糟糕的想法),您还需要添加其他一些东西。即:-Wl,--whole-archive -lpthread -Wl,--no-whole-archive

检查https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52590