c - 这个错误在 C : free(): invalid next size (fast): 0x00000000020b0200 中意味着什么

标签 c scope free

<分区>

我使用 for 循环创建自定义数据结构的对象,并对它们执行一些操作。这些对象包含 ucontext_t 字段,所以我基本上是在做 makecontextswapcontext。每个 ucontext_t 对象的堆栈大小分配是默认的 SIGSTKSZ

gcc编译我的程序后,运行结果下面有如下错误。这个错误是否意味着我的内存在退出我的程序之前没有被释放?一般来说,您可以从这个错误中看出什么?

*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x00000000020b0200 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7ffeb31acb96]
./a.out[0x401261]
./a.out[0x4009fe]
/lib/x86_64-linux-gnu/libc.so.6(+0x364a0)[0x7ffeb31644a0]
./a.out[0x401080]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7ffeb314f76d]
./a.out[0x400899]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:01 23921                              /home/cs/Development/C/gtthreads_fresh/a.out
00601000-00602000 r--p 00001000 08:01 23921                              /home/cs/Development/C/gtthreads_fresh/a.out
00602000-00603000 rw-p 00002000 08:01 23921                              /home/cs/Development/C/gtthreads_fresh/a.out
020a2000-020c5000 rw-p 00000000 00:00 0                                  [heap]
7ffeb2f18000-7ffeb2f2d000 r-xp 00000000 08:01 136328                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffeb2f2d000-7ffeb312c000 ---p 00015000 08:01 136328                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffeb312c000-7ffeb312d000 r--p 00014000 08:01 136328                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffeb312d000-7ffeb312e000 rw-p 00015000 08:01 136328                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffeb312e000-7ffeb32e3000 r-xp 00000000 08:01 136874                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffeb32e3000-7ffeb34e3000 ---p 001b5000 08:01 136874                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffeb34e3000-7ffeb34e7000 r--p 001b5000 08:01 136874                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffeb34e7000-7ffeb34e9000 rw-p 001b9000 08:01 136874                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffeb34e9000-7ffeb34ee000 rw-p 00000000 00:00 0 
7ffeb34ee000-7ffeb3510000 r-xp 00000000 08:01 137879                     /lib/x86_64-linux-gnu/ld-2.15.so
7ffeb36f9000-7ffeb36fc000 rw-p 00000000 00:00 0 
7ffeb370c000-7ffeb3710000 rw-p 00000000 00:00 0 
7ffeb3710000-7ffeb3711000 r--p 00022000 08:01 137879                     /lib/x86_64-linux-gnu/ld-2.15.so
7ffeb3711000-7ffeb3713000 rw-p 00023000 08:01 137879                     /lib/x86_64-linux-gnu/ld-2.15.so
7fff659db000-7fff659fc000 rw-p 00000000 00:00 0                          [stack]
7fff659fe000-7fff65a00000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted (core dumped)

最佳答案

这意味着您正在释放一个无效地址,或者更有可能覆盖了已分配 block 的边界。 @Cantfindmyname 给了你 I get this error: "glibc detected"它会告诉您问题是什么,但不会告诉您如何找出您的程序导致问题的位置,因为这些东西很难找到。这里最好的工具是 valgrind,它(通常)会很快发现您对内存所做的任何不当行为,尤其是堆内存。

关于c - 这个错误在 C : free(): invalid next size (fast): 0x00000000020b0200 中意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687388/

相关文章:

使用 malloc 和 realloc 将静态数组更改为动态数组?

c - 为什么 child 的 getppid() 返回 1

c - 如何释放结构体c中的双指针?

javascript - JS OOP 外部原型(prototype)函数调用(作用域)

c - C语言递归函数的几个问题

c - 如何处理 C 中的 free() 错误?

c - 使用宏简化释放许多指针

控制可能到达非 void 函数的末尾 ERROR

c - 警告 : initialization makes pointer from integer without a cast(integer pointers)

java - 变量的方法范围 (java)