Память засорена за концом выделенного блока - PullRequest
0 голосов
/ 06 сентября 2018

Вот соответствующий фрагмент из сеанса GDB:

item_destroy (item=0x641f40) at hash.c:228
228   if( item == NULL ) // Make sure I'm dealing with a non-null item
(gdb) n
230   mstatus = mprobe( item->key );
(gdb) n
231   if( mstatus == MCHECK_OK ) // Check to make sure everything is good
(gdb) p mstatus  (Double check at execution time)
$1 = MCHECK_OK  <- Yep we're good
(gdb) n
232     free( item->key );  // If was true
(gdb) n
memory clobbered past end of allocated block

Program received signal SIGABRT, Aborted.
0x00007ffff693c277 in raise () from /lib64/libc.so.6

Я не могу думать о том, как это вообще возможно. И, чтобы быть ясным, это не многопоточный кусок кода, и эта та же самая процедура уже вызывалась много раз до этого конкретного выполнения. Во всяком случае, это похоже на данные. ключ item-> в этой точке равен «0» и фактически обнуляется. Он был выделен как malloc (3), потому что я добавляю 2 к длине ключа. 1 для завершающего нуля, который я вставляю, и один дополнительный только потому, что. Может ли это быть выравниванием?

...