Вот соответствующий фрагмент из сеанса 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 для завершающего нуля, который я вставляю, и один дополнительный только потому, что. Может ли это быть выравниванием?