bug: mmap 没理解好导致的Bus error (core dumped)

本文通过一个实例介绍了由于不正确使用mmap导致的Bus error和程序崩溃问题。在调试中发现,当尝试一次性映射超过文件长度的数据时,会出现这个问题。解决方案是分段进行映射,确保BUF_SIZE_W不超过实际文件长度,以避免core dump的发生。

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

Bus error (core dumped) 

 

gdb:

Program received signal SIGBUS, Bus error.
0x00000000004027c0 in MyTask::finish_the_work (this=0x7fffffffd7c0) at task.cc:233
233            p_w[i]=data_[i];
(gdb)

 

 

 

部分代码:

	
	int	off_r=0;
	int	off_w=0;
	//const char *filename_read = filename.c_str();//filename 
	//fd_r = open(filename_read,O_RDWR);
	//assert(fd_r);

	filename_write="letter";
	//fd_w = open(filename_write,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,0644);
	fd_w = open(filename_write,O_RDWR|O_CREAT|O_TRUNC,0644);
	assert(fd_w);

	//length_r = lseek(fd_r,0,SEEK_END);
	//length_w = lseek(fd_w,BUF_SIZE_W,SEEK_CUR);
	
	cout<<"length_r:"<<length_r<<endl;
	//cout<<"l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值