Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=9344783&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 15:47:28 2016
Кодировка: Windows-1251
Visual Studio 2005, C++, как отслеживать перезапись значений - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
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
5

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
5

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

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
2

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

JUnit

Рег.: 08.03.2005
Сообщений: 3812
Из: Беляево
Рейтинг: 1621
  Re: Visual Studio 2005, C++, как отслеживать перезапись значений [re: Misha]
      01.03.2010 21:59
2

// Можно поставить брейкпоинт на изменение памяти по конкретному адресу.

Всегда так делаю.

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
 

Ну как? решилась проблемка? каким методом?

Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 2 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в