Thread 2 “ThreadPool.out“ received signal SIGSEGV, Segmentation fault.关于空指针解引用引起的段错误异常

文章讲述了在学习Linux线程池时遇到的段错误问题,错误发生在while(!pool->shutdown)语句,原因是pthread_create函数传入的线程参数错误,导致manager函数接收到空指针。修复方法是正确传递线程池指针,避免空指针解引用造成的段错误。经过修改和重新调试,问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景:

        最近在学习Linux的多线程和线程池,在调试用C写的一段线程池代码的过程中,出现了一个错误(只截了关键部分):

Thread 2 "ThreadPool.out" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff77c2700 (LWP 4298)]
0x00005555555555fa in manager (arg=0x0) at /home/syl/projects/ThreadPool/threadpool.c:246
246        while (!pool->shutdown)
Segmentation fault

 大意是说在246行的while (!pool->shutdown)处出现了段错误。(图中是修改过的所以显示250,可忽略)

这里说明一下246行附近写了什么:

void* manager(void* arg)
{
	ThreadPool* pool = (ThreadPool*)arg;
	while (!pool->shutdown)                    // 246行处
	{
        ...
    }
    return NULL;
}



首先来了解一下什么是段错误。(懂的可以略过)

段错误(Segm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值