c++ - Pthread_create 导致段错误(C++,Kubutnu 15)

标签 c++ linux pthreads

老实说,我感到震惊和困惑。在阅读了几十个有关“pthread_create 导致段错误”的主题后,我仍然遇到这个问题。我按照命令做了所有事情,结果为零:在调试阶段,程序在行创建过程中给出了段错误。

我已经什么都不懂了。我将非常感谢你的帮助。提前致谢。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

#include <unistd.h>
#include <pthread.h>
#include <interfacemanager.h>
using namespace std;

InterfaceManager IFACE;



void* watch_for_interfaces(void*)
{
    IFACE.monitoring();
}



int main()
{

        sigset_t   *set;
        sigemptyset(&(*set));
        sigaddset(&(*set), SIGINT);
        sigaddset(&(*set), SIGTERM);

        pthread_t th1, th2;
        int i=1;
        if (pthread_create(&th2, NULL, watch_for_interfaces, (void*)&i) != 0) {
          perror("th2 error\n");
          exit(1);
        }




        printf ("Terminating\nPress eny key\n");
        getchar();

        exit(EXIT_SUCCESS);

        return 0;
    }

最佳答案

问题不在于 pthread_create ,而在于您的信号函数。

    sigset_t   *set;
    sigemptyset(&(*set));
    sigaddset(&(*set), SIGINT);
    sigaddset(&(*set), SIGTERM);

在这里,您使用了一个未初始化的变量set,并将其传递给未定义的信号函数。您可以malloc它,但有必要将其写为

    sigset_t   set;
    sigemptyset(&set);
    sigaddset(&set, SIGINT);
    sigaddset(&set, SIGTERM);

关于c++ - Pthread_create 导致段错误(C++,Kubutnu 15),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823233/

相关文章:

c - Pthread连接段错误

c++ - CreateGraphicsPipelineState 失败并显示 E_INVALIDARG

c++ - 实例化后模板的特化?

c++ - 从 .txt 文件访问 double

linux - 使用命令的输出来喂另一个

c++ - 混合调试和发布库 : Windows vs Linux, 静态与共享

c++ - 我是否过度设计了每线程信号阻塞?

c - 使用 POSIX 线程进行文件操作

C++:windows.h 通常是一个高效的代码库吗?

linux - 为 powerpc 构建 mysql++ 库