Visual Studio 2005, C++, как отслеживать перезапись значений

kazakova_777777

Ситуация такая - в моей программе почему-то перезаписываются переменные.
Например, после блока вычислений определенная переменная меняет свое значение, хотя она в вычислениях не участвовала.
Я думаю что это связано с тем что блок памяти с переменной перезаписывается при выходе за пределы массива и т.д.
Подскажите плз как с этим бороться и как это можно отслеживать?
Так сказать лучшие практики, как этого не допускать
Программа большая и вычисления очень большие, найти такое место сразу очень трудно бывает

kazakova_777777

Основная проблема - превышение допустимого предела индекса массива, как такое можно отследить ?

salamander

Основная проблема - превышение допустимого предела индекса массива, как такое можно отследить ?
1) методом пристального взгляда
2) портировать программу под линукс и натравить на нее Valgrind
3) портировать Valgrind под винду и натравить на твою программу
4) найти какую-нибудь альтернативу Valgrind'у работающую под виндой (Rational Purify какой-нибудь)
5) написать обертку над массивом, которая проверяет значения индекса, и использовать эту обертку вместо массивов
Выбирай любой метод, какой больше нравится.

trobak

Можно поставить брейкпоинт на изменение памяти по конкретному адресу. Тогда сможешь увидеть, в какой момент портится переменная, которая не должна была измениться. Отслеживаемый адрес, понятное дело, должен заново задаваться при каждом запуске программы (точнее, в тот момент, когда эта самая переменная входит в область видимости).

Serab

Да, порчи памяти — это весело. Полезно бывает посмотреть, где находится в памяти переменная (в первом приближении: статическая, автоматическая, динамическая от этого зависит, где искать.

Maurog

6) в крайних случаях используется метод printf

enochka1145

// Можно поставить брейкпоинт на изменение памяти по конкретному адресу.
Всегда так делаю.
1. Ставишь брейкпойнт в том месте, где твоя переменная var в области видимости и ещё не испорчена.
2. Узнаешь (окно Watch) &var
3. Устанавливаешь по этому адресу Breakpoints > New Data Breakpoint
4. Видишь, как твою переменную затирают при освобождении памяти, при работе с отдельными битами, при выходе за пределы массива. Или ещё как, не сталкивался.

Serab

Ну как? решилась проблемка? каким методом?
Оставить комментарий
Имя или ник:
Комментарий: