Ошибка Valgrind: неверная запись размера 4 (но говорит, что ошибка в free ()) - PullRequest
0 голосов
/ 14 октября 2011

Во-первых, вот сообщение, которое мне дает 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 Ответ

3 голосов
/ 14 октября 2011

Трудно сказать с таким небольшим количеством информации (в частности, без кода), но мне кажется, что вы, возможно, пытаетесь вызвать free по указателю, который ссылается на смещение в области памяти, которая уже была освобожден более ранним вызовом free. free необходимо манипулировать структурами данных кучи, поэтому неудивительно, что он пытается выполнить запись в область памяти.

...