Pthread_create 导致分段错误(C++、Kubutnu 15)
Pthread_create causing segmentation fault (C++, Kubutnu 15)
老实说,我感到震惊和困惑。在 "pthread_create causing segmentation fault" 上阅读了几十个主题后,我仍然有这个问题。我按照命令做了所有事情,结果为零:在调试阶段,程序在行创建过程中给出了分段错误。
我已经什么都不懂了。我将不胜感激你的帮助。提前致谢。
#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);
老实说,我感到震惊和困惑。在 "pthread_create causing segmentation fault" 上阅读了几十个主题后,我仍然有这个问题。我按照命令做了所有事情,结果为零:在调试阶段,程序在行创建过程中给出了分段错误。
我已经什么都不懂了。我将不胜感激你的帮助。提前致谢。
#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);