alexxxx
|
addict
|
|
|
|
Рег.: 19.04.2008
|
Сообщений: 510
|
Из: Паттайя, Walking Street
|
Рейтинг: -237
|
|
Visual Studio 2005, C++, как отслеживать перезапись значений
01.03.2010 16:25
|
|
|
Ситуация такая - в моей программе почему-то перезаписываются переменные. Например, после блока вычислений определенная переменная меняет свое значение, хотя она в вычислениях не участвовала. Я думаю что это связано с тем что блок памяти с переменной перезаписывается при выходе за пределы массива и т.д. Подскажите плз как с этим бороться и как это можно отслеживать? Так сказать лучшие практики, как этого не допускать Программа большая и вычисления очень большие, найти такое место сразу очень трудно бывает
|
Билеты в рай. Море, солнце и очень много симпатичных девушек КРУГЛЫЙ ГОД напролет  |
|
alexxxx
|
addict
|
|
|
|
Рег.: 19.04.2008
|
Сообщений: 510
|
Из: Паттайя, Walking Street
|
Рейтинг: -237
|
|
Re: Visual Studio 2005, C++, как отслеживать перезапись значений
[re: alexxxx]
01.03.2010 16:26
|
|
|
Основная проблема - превышение допустимого предела индекса массива, как такое можно отследить ?
|
Билеты в рай. Море, солнце и очень много симпатичных девушек КРУГЛЫЙ ГОД напролет  |
|
Chamrajnagar
|
T_T
|
|
|
|
Рег.: 24.11.2005
|
Сообщений: 5094
|
Из: Северное кучкино
|
Рейтинг: 3356
|
|
Re: Visual Studio 2005, C++, как отслеживать перезапись значений
[re: alexxxx]
01.03.2010 16:48
|
|
|
Quote:
Основная проблема - превышение допустимого предела индекса массива, как такое можно отследить ?
1) методом пристального взгляда 2) портировать программу под линукс и натравить на нее Valgrind 3) портировать Valgrind под винду и натравить на твою программу 4) найти какую-нибудь альтернативу Valgrind'у работающую под виндой (Rational Purify какой-нибудь) 5) написать обертку над массивом, которая проверяет значения индекса, и использовать эту обертку вместо массивов
Выбирай любой метод, какой больше нравится.
|
Era of Lite beer, hand calculators and "user-friendly" software. |
|
Misha
|
addict
|
|
|
|
Рег.: 29.08.2002
|
Сообщений: 600
|
|
Рейтинг: 63
|
|
Re: Visual Studio 2005, C++, как отслеживать перезапись значений
[re: alexxxx]
01.03.2010 16:55
|
|
|
Можно поставить брейкпоинт на изменение памяти по конкретному адресу. Тогда сможешь увидеть, в какой момент портится переменная, которая не должна была измениться. Отслеживаемый адрес, понятное дело, должен заново задаваться при каждом запуске программы (точнее, в тот момент, когда эта самая переменная входит в область видимости).
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: Visual Studio 2005, C++, как отслеживать перезапись значений
[re: alexxxx]
01.03.2010 16:57
|
|
|
Да, порчи памяти - это весело. Полезно бывает посмотреть, где находится в памяти переменная (в первом приближении: статическая, автоматическая, динамическая), от этого зависит, где искать.
|
|
horror
|
гонобобель
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 3783
|
|
Рейтинг: 2135
|
|
Re: Visual Studio 2005, C++, как отслеживать перезапись значений
[re: Chamrajnagar]
01.03.2010 17:00
|
|
|
6) в крайних случаях используется метод printf
|
|
JUnit
|
|
|
|
|
Рег.: 08.03.2005
|
Сообщений: 3812
|
Из: Беляево
|
Рейтинг: 1621
|
|
Re: Visual Studio 2005, C++, как отслеживать перезапись значений
[re: Misha]
01.03.2010 21:59
|
|
|
// Можно поставить брейкпоинт на изменение памяти по конкретному адресу.
Всегда так делаю.
1. Ставишь брейкпойнт в том месте, где твоя переменная var в области видимости и еще не испорчена. 2. Узнаешь (окно Watch) &var 3. Устанавливаешь по этому адресу Breakpoints > New Data Breakpoint 4. Видишь, как твою переменную затирают при освобождении памяти, при работе с отдельными битами, при выходе за пределы массива. Или еще как, не сталкивался.
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: Visual Studio 2005, C++, как отслеживать перезапись значений
[re: alexxxx]
02.03.2010 19:27
|
|
|
Ну как? решилась проблемка? каким методом?
|
|