GDB: инициализировать память с фиксированным значением - PullRequest
1 голос
/ 12 февраля 2020

В моем коде есть где-то неинициализированный указатель, который, кажется, освобождается. Проект довольно большой, и я не могу найти ценность. Проблема в том, что, как только я присоединяю отладчик, память, кажется, инициализируется нулем, в результате чего указатель равен NULL и free, что не вызывает проблем. Есть ли способ инициализировать память при использовании GDB с чем-то вроде 0xDEADBEEF?

1 Ответ

1 голос
/ 12 февраля 2020

Есть ли способ инициализировать память при использовании GDB с чем-то вроде 0xDEADBEEF

Конечно, если вы знаете его адрес: (gdb) call memset($addr, 0xCC, $size) или
(gdb) set *(int*)$addr = 0xDEADBEEF.

Проблема обычно в том, что вы не знаете , где , что неинициализированный указатель будет находиться в памяти.

Один из способов найти его - Memory Sanitizer awatch command.

PS Вы, кажется, довольно уверены, что ваша проблема «неинициализирована бесплатно», но симптомы «двойного освобождения» часто похожи. Я бы попробовал Address Sanitizer , прежде чем делать что-либо еще.

...