Valgrind错误:写入大小为4的无效(但是错误是在free()中)

时间:2011-10-14 18:01:04

标签: c debugging free valgrind

首先,这是valgrind给我的消息(这只是一个错误,我多次得到相同的消息)

==25248== Invalid write of size 4
==25248==    at 0x4024B3A: free (vg_replace_malloc.c:366)
==25248==    by 0x8048F5E: sthread_free_ctx (sthread_ctx.c:86)
==25248==    by 0x80489C1: sthread_user_exit (sthread_user.c:105)
==25248==    by 0x804883C: dispatcher (sthread_user.c:40)
==25248==  Address 0x41a6148 is 65,376 bytes inside a block of size 65,536 free'd
==25248==    at 0x4024B3A: free (vg_replace_malloc.c:366)
==25248==    by 0x8048F5E: sthread_free_ctx (sthread_ctx.c:86)
==25248==    by 0x80489C1: sthread_user_exit (sthread_user.c:105)
==25248==    by 0x804883C: dispatcher (sthread_user.c:40)

我不理解它,因为我习惯于在没有足够空间的情况下得到这个错误,所以为什么我在尝试释放某些东西时会收到错误?写的是什么?

感谢

1 个答案:

答案 0 :(得分:3)

很难用如此少的信息来判断(特别是:没有代码),但在我看来,你可能试图在指针上调用free,指针指向内存区域的偏移量早先打电话给free已经被释放了。 free需要操作堆数据结构,因此它试图写入内存区域并不奇怪。