Visual Studio 2005, C++, как отслеживать перезапись значений
Основная проблема - превышение допустимого предела индекса массива, как такое можно отследить ?
Основная проблема - превышение допустимого предела индекса массива, как такое можно отследить ?1) методом пристального взгляда
2) портировать программу под линукс и натравить на нее Valgrind
3) портировать Valgrind под винду и натравить на твою программу
4) найти какую-нибудь альтернативу Valgrind'у работающую под виндой (Rational Purify какой-нибудь)
5) написать обертку над массивом, которая проверяет значения индекса, и использовать эту обертку вместо массивов
Выбирай любой метод, какой больше нравится.
Можно поставить брейкпоинт на изменение памяти по конкретному адресу. Тогда сможешь увидеть, в какой момент портится переменная, которая не должна была измениться. Отслеживаемый адрес, понятное дело, должен заново задаваться при каждом запуске программы (точнее, в тот момент, когда эта самая переменная входит в область видимости).
Да, порчи памяти — это весело. Полезно бывает посмотреть, где находится в памяти переменная (в первом приближении: статическая, автоматическая, динамическая от этого зависит, где искать.
6) в крайних случаях используется метод printf
Всегда так делаю.
1. Ставишь брейкпойнт в том месте, где твоя переменная var в области видимости и ещё не испорчена.
2. Узнаешь (окно Watch) &var
3. Устанавливаешь по этому адресу Breakpoints > New Data Breakpoint
4. Видишь, как твою переменную затирают при освобождении памяти, при работе с отдельными битами, при выходе за пределы массива. Или ещё как, не сталкивался.
Ну как? решилась проблемка? каким методом?
Оставить комментарий
kazakova_777777
Ситуация такая - в моей программе почему-то перезаписываются переменные.Например, после блока вычислений определенная переменная меняет свое значение, хотя она в вычислениях не участвовала.
Я думаю что это связано с тем что блок памяти с переменной перезаписывается при выходе за пределы массива и т.д.
Подскажите плз как с этим бороться и как это можно отслеживать?
Так сказать лучшие практики, как этого не допускать
Программа большая и вычисления очень большие, найти такое место сразу очень трудно бывает