Вы можете сделать это с помощью функции-обертки для malloc и добавления дополнительных параметров в оболочку который показывает распределение памяти и расположение идентификатора кода/процесса, который его выделил.
В противном случае вы можете рассмотреть возможность использования отладочной версии malloc в visual studio, которая приведена ниже.
Использовать _malloc_dbg, определенный в. Это всего лишь malloc с дополнительными параметрами для имени файла и linenumber для распечатки или отслеживания местоположения. Это поможет вам в отладке.
void *_malloc_dbg
(
size_t size,
int blockType,
const char *filename,
int linenumber
);
Все эти опции заставляют вас переработать код, где выполняется malloc.
Другой вариант, я думаю, было бы больно ломать malloc каждый раз, когда он вызывается, и видеть, как только адрес доступа к памяти снова открывается. Надеемся, что динамическая смена мест памяти в вашей кодовой базе не происходит, и, возможно, она будет отслеживаться модулем управления памятью, если таковая имеется. Если нет, вы можете снова проверить местоположение адреса, и в этот момент вы можете использовать стек вызовов в visual studio для дальнейшего его отладки.
Одна небольшая идея, которую я имею, заключается в том, чтобы написать небольшой код для сохранения адреса, выделяемого всякий раз, когда вы используете malloc для этой конкретной переменной. Это можно сделать с помощью глобальной переменной, которая устанавливается перед тем, как вы выделите память, для которой вам нужно отслеживать. Если эта переменная установлена, всегда сохраняйте этот адрес памяти и сравнивайте ее с этим адресом всякий раз, когда память снова попадает. Это можно сделать, если вы использовали оболочку памяти в своем коде для управления памятью.
Почему у вас должно быть «точка» malloc во многих местах? Почему бы не использовать тот, который вы уже выделили? – Abhineet
AFAIK, в Visual Studio нет ничего подобного. Вы должны пройти через свой код, чтобы найти это. – Abhineet
Это неправильный код, который мне нужно изменить, но проблема в том, что в большинстве мест другая переменная указывает на точку, и это изменяется. Поэтому трудно проверить каждую переменную! – user1692342