2014-01-20 2 views
0

Я использую VS2008 для написания программы. В моем коде есть одна конкретная строка, которая вызывает числовую ошибку. Это:Как узнать, когда доступ к переменной в моем коде?

Qp[j] = (Cp - Cm)/(Bp + Bm); 

Qp является std :: vector. Когда я прокомментирую эту строку, числовая ошибка исчезает. Я просматриваю свой код за строкой, чтобы найти все места, которые имеют доступ к Qp [j]. Мне было интересно, есть ли в VS2008 функция или программа linux, которая обертывает исполняемый файл, который может идентифицировать каждую строку кода, которая читает из этого раздела памяти (конкретный элемент в векторе)?

Я пробовал искать в Интернете, но ключевые слова, которые я использовал, приводили результаты, относящиеся к глобальным переменным.

--- EDIT

Привет всем. Тем, кто ответил, спасибо. Чтобы уточнить мой вопрос:

Представьте, что у меня есть вектор с 5 элементами. Я хотел бы знать все места в моем коде, которые используют значение, хранящееся в элементе 3, в любой момент времени во время выполнения. Есть простой способ сделать это?

+5

Вы можете установить контрольную точку памяти в отладчике. – Chad

+1

вы можете добавить точку останова в этой строке. – Ankit

+0

Опция добавления «точки останова данных» выделена серым цветом. Что ты предлагаешь? –

ответ

2

Я не уверен, правильно ли я вас понял, но если вы прокомментируете эту строку и код работает, возможно, проблема , что линия, и вам не нужно проверять другие строки.

Возможно, в вашем случае вы попадаете в ситуацию, когда Bp+Bm = 0 (деление на нулевую ошибку).

+0

Код работает в любом случае, потому что Qp [j] никогда не должен быть доступ к какой-либо другой строке кода. Это фиктивная ценность. Поэтому меня беспокоит тот факт, что он влияет на код. Проблема не в том, что строка кода, это другие строки, которые используют это значение. Кроме того, Bp + Bm никогда не равен 0. –

+0

Подождите. Вы только что сказали, что Qp [j] не должны быть доступны. Тогда почему проблема должна заключаться в использовании других строк? Почему другие линии будут иметь к нему доступ вообще, если они не должны? – Gasim

+0

ваше приложение многопоточное? считают, что вектор не синхронизирован – dynamic

0

Qp может не иметь столько элементов, сколько индекс j, проверьте размер Qp.

+0

, что маловероятно, потому что это вызовет exccection – dynamic

+0

@llnk Оператор оператора индекса обычно не бросает, метод '.at (index)' делает. По крайней мере afaik 'operator []' с индексом за пределами границ - UB, а 'at' требуется для выброса исключенного из-за границы исключения. См. Http://en.cppreference.com/w/cpp/container/vector/operator_at – stefan

+0

Извините! Ты прав. Оператор индекса не имеет проверок, поэтому исключение не возникает, но если вектор пуст и к нему (несуществующий) третий элемент обращается, он будет аварийно завершен.Исправьте меня, если я ошибаюсь – nightwing

Смежные вопросы