首先,这是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)
我不理解它,因为我习惯于在没有足够空间的情况下得到这个错误,所以为什么我在尝试释放某些东西时会收到错误?写的是什么?
感谢
答案 0 :(得分:3)
很难用如此少的信息来判断(特别是:没有代码),但在我看来,你可能试图在指针上调用free
,指针指向内存区域的偏移量早先打电话给free
已经被释放了。 free
需要操作堆数据结构,因此它试图写入内存区域并不奇怪。