Pthread_create导致分割错误(C++,Kubutnu 15)

Pthread_create causing segmentation fault (C++, Kubutnu 15)

本文关键字:C++ Kubutnu 错误 create 分割 Pthread      更新时间:2023-10-16

老实说,我很震惊和困惑。在阅读了几十个关于"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 errorn");
          exit(1);
        }


        printf ("TerminatingnPress eny keyn");
        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);