已经有一段时间没来了,但我被困在。。。
我好像搞不清这段代码的问题出在哪里
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/

10-16 03:47