2011-10-14 59 views
0

首先,这里是消息的valgrind给我(这只是一个错误,我得到了同样的信息多次)Valgrind的错误:大小为4的无效写入(但说错误是在无())

==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) 

我不明白这一点,因为我习惯于当我不使用malloc足够的空间时出现此错误,那么为什么当我尝试释放某些东西时会出现错误?正在写什么?

感谢

+0

它告诉你什么是错误的地址0x41a6148是一个大小为65,536 free'd的块内的65,376字节。你(最有可能)释放一个无效的指针。 – user786653

+0

发布相关代码行。 – BlackJack

回答

3

这是很难说有这么少的信息(尤其是:无码),但它看起来像你对我可能会尝试调用free上指偏移到存储区的指针早先通过拨打free已经解除了这个问题。 free需要操作堆数据结构,所以尝试写入内存区域并不奇怪。

+0

好的,这很有道理!当我删除行(sthread_free_ctx())时,valgrind给了我没有内存泄漏,所以我会假设上下文在某个其他时间是free'd的......谢谢! – Toadums

相关问题