当我编译程序时,这个内存映射意味着什么?
What does this memory map mean when I compile my program?
我使用g++来编译我的程序。在我执行程序的80%的时间里,我得到一个内存映射。我不知道记忆地图是什么意思,也不知道如何解决它。下面是输出:
*** glibc detected *** ./main: double free or corruption (!prev): 0x0881fdc8 ***
======= Backtrace: =========
[0x80da7f8]
[0x80dec69]
[0x80a5441]
[0x80a546d]
[0x8059227]
[0x8058b2f]
[0x8058f41]
[0x80567ec]
[0x80c075f]
[0x8048191]
======= Memory map: ========
00149000-0014a000 r-xp 00000000 00:00 0 [vdso]
08048000-08165000 r-xp 00000000 08:02 2101716 /home/armandmaree/Desktop/Projek_Fase2 (copy)/main
08166000-08168000 rw-p 0011d000 08:02 2101716 /home/armandmaree/Desktop/Projek_Fase2 (copy)/main
08168000-08170000 rw-p 00000000 00:00 0
09a45000-09a67000 rw-p 00000000 00:00 0 [heap]
b7600000-b7621000 rw-p 00000000 00:00 0
b7621000-b7700000 ---p 00000000 00:00 0
b77e2000-b77e3000 rw-p 00000000 00:00 0
bfc35000-bfc4a000 rw-p 00000000 00:00 0 [stack]
Aborted
如果你知道我如何找出问题所在,或者至少向我解释一下内存映射是什么意思,那就太好了。
内存映射告诉您进程崩溃了。[Backtrace:]部分告诉您发生崩溃时的堆栈回溯跟踪(哪个函数调用了哪个函数)。内存映射告诉你哪些数据在进程的哪些地址。
像其他人在注释中建议的那样,使用-g编译并在调试器(gdb)下运行程序以获得更好的信息。由于崩溃是由堆损坏引起的,因此使用valgrind工具会有所帮助,因为它专门处理这类问题。
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 字符串共享内存映射的向量
- 准确了解对象在内存中的映射方式
- 将布局映射到内存地址
- 确保内存映射页位于内存中
- <char> 使用 Vulkan 映射内存时如何使用 std::vector 而不是 void**?
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- C++从 Java 角度设置和映射内存管理
- 如何在 OpenCL 中使用缓冲区分配和映射内存机制
- 两个进程之间的共享映射内存在编辑时未更新
- 频繁访问文件映射内存
- 由于动态数组而导致的哈希映射内存泄漏
- 映射和多映射:内存使用/管理差异
- 在自定义硬件上映射内存
- 内存映射内存是否可能
- 具有动态分配内存和映射内存的Shared_ptr
- mmap小尺寸内存,当munmap为glibc时,会将映射内存释放到操作系统
- C++ 标准::映射内存管理