g++ 下 new[] 之后用delete释放 会提示 munmap_chunk()

这篇博客详细记录了在C++中使用new[]分配内存后,通过delete释放时遇到的munmap_chunk()错误。错误发生于程序尝试释放一块无效的内存指针,导致glibc检测到问题并触发回溯。内容包括错误的堆内存映射和库函数调用栈,有助于理解内存管理问题。

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

#include<iostream>
using namespace std;

class Test
{
	public:
		Test()
		{
			cout << "construct" << endl;
		}
		~Test()
		{
			cout << "destruct" << endl;
		}
};

int main(void)
{
	Test *p1 = new Test[3];
	cout << hex << p1 << endl;
	delete p1;

	Test *p2 = new Test[3];
	cout << hex << p2 << endl;
	delete []p2;


	return 0;
}


error:

construct
construct
construct
0x8e2b00c
destruct
*** glibc detected *** ./delete[]: munmap_chunk(): invalid pointer: 0x08e2b00c ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x73e42)[0xb758ee42]
/lib/i386-linux-gnu/libc.so.6(+0x74525)[0xb758f525]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb778851f]
./delete[][0x8048893]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75344d3]
./delete[][0x8048761]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:0b 775        /home/useralzman/cTest/delete[]
08049000-0804a000 r--p 00001000 08:0b 775        /home/useralzman/cTest/delete[]
0804a000-0804b000 rw-p 00002000 08:0b 775        /home/useralzman/cTest/delete[]
08e2b000-08e4c000 rw-p 00000000 00:00 0          [heap]
b74ed000-b74ef000 rw-p 00000000 00:00 0
b74ef000-b7519000 r-xp 00000000 08:09 394176     /lib/i386-linux-gnu/libm-2.15.so
b7519000-b751a000 r--p 00029000 08:09 394176     /lib/i386-linux-gnu/libm-2.15.so
b751a000-b751b000 rw-p 0002a000 08:09 394176     /lib/i386-linux-gnu/libm-2.15.so
b751b000-b76ba000 r-xp 00000000 08:09 394144     /lib/i386-linux-gnu/libc-2.15.so
b76ba000-b76bc000 r--p 0019f000 08:09 394144     /lib/i386-linux-gnu/libc-2.15.so
b76bc000-b76bd000 rw-p 001a1000 08:09 394144     /lib/i386-linux-gnu/libc-2.15.so
b76bd000-b76c1000 rw-p 00000000 00:00 0
b76c1000-b76dd000 r-xp 00000000 08:09 394165     /lib/i386-linux-gnu/libgcc_s.so.1
b76dd000-b76de000 r--p 0001b000 08:09 394165     /lib/i386-linux-gnu/libgcc_s.so.1
b76de000-b76df000 rw-p 0001c000 08:09 394165     /lib/i386-linux-gnu/libgcc_s.so.1
b76df000-b77b7000 r-xp 00000000 08:09 530977     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b77b7000-b77b8000 ---p 000d8000 08:09 530977     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b77b8000-b77bc000 r--p 000d8000 08:09 530977     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b77bc000-b77bd000 rw-p 000dc000 08:09 530977     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b77bd000-b77c4000 rw-p 00000000 00:00 0
b77d4000-b77d8000 rw-p 00000000 00:00 0
b77d8000-b77d9000 r-xp 00000000 00:00 0          [vdso]
b77d9000-b77f9000 r-xp 00000000 08:09 394124     /lib/i386-linux-gnu/ld-2.15.so
b77f9000-b77fa000 r--p 0001f000 08:09 394124     /lib/i386-linux-gnu/ld-2.15.so
b77fa000-b77fb000 rw-p 00020000 08:09 394124     /lib/i386-linux-gnu/ld-2.15.so
bfc2b000-bfc4c000 rw-p 00000000 00:00 0          [stack]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值