已经有一段时间没来了,但我被困在。。。
我好像搞不清这段代码的问题出在哪里
logger.cpp文件
#include "logger.h"
#include <unistd.h>
#include <stdlib.h>
void* __logger(void* data) // dummy function
{
sleep(10);
return NULL;
}
logger_t::logger_t()
{
// create a pipe for communicating with thread
if (pipe(fd) == -1) // something went wrong
{
// error here
exit(EXIT_FAILURE);
}
// now create the thread that will write to the log
if (pthread_create(log_pid, NULL, &__logger, NULL)) // something went wrong
{
exit(EXIT_FAILURE);
}
}
logger_t::~logger_t()
{
close(fd[1]); // close read end of pipe, logging thread will read EOF and exit
if (pthread_join(*log_pid, NULL))
{
exit(EXIT_FAILURE);
}
}
记录器.h
#ifndef LOGGER_H
#define LOGGER_H
#include <pthread.h>
class logger_t
{
public:
logger_t();
~logger_t();
private:
int fd[2];
pthread_t* log_pid;
};
#endif // LOGGER_H
主.cpp
#include "logger.h"
int main()
{
logger_t proglog;
return 0;
}
代码编译得很好,但是当我运行它时,在pthread_create()调用期间出现了分段错误。。。有什么想法吗?我已经把程序中的所有内容都删除了,但仍然会出现同样的崩溃。。。
最佳答案
从pthread_create()
的手册页:
在返回之前,对pthread_create()的成功调用将存储ID
由线程指向缓冲区中的新线程;thread
参数应该指向某个有效的值—在您的情况下,您传递的是一个未初始化的指针。也许这和它有关。要确认,请在调试器(如gdb)中运行它并查看。
另外,正如您所指出的,这是c++,您应该真正使用std::thread()
。
关于c++ - 调用pthread_create()C++ Linux时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44243486/