2014-01-20 40 views
0

我正在使用VS2008編寫程序。我的代碼中有一個特定的行會導致數字錯誤。它是:如何知道何時在我的代碼中訪問變量?

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

Qp是一個std :: vector。當我評論這條線時,數字錯誤消失。我正在通過我的代碼逐行查找所有訪問Qp [j]的地方。我想知道VS2008中是否有一個功能,或者是一個包含可執行文件的Linux程序,它可以識別從該內存部分讀取的每行代碼(向量中的特定元素)?

我試過在線搜索,但我用的關鍵字提出了有關全局變量的結果。

---編輯

大家好。對於那些回覆,謝謝。只是爲了澄清我的問題:

想象一下,我有一個有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

這是不太可能的,因爲它會觸發檢測 – dynamic

+0

@llnk下標操作符操作符通常不會拋出,'.at(index)'方法會執行。索引越界的至少afaik'operator []'是UB,而'at'則需要拋出一個超出界限的異常。見http://en.cppreference.com/w/cpp/container/vector/operator_at – stefan

+0

對不起!你是對的。下標運算符沒有檢查邊界,因此不會引發異常,但如果矢量爲空且訪問(不存在)第三個元素,它將崩潰。糾正我,如果我錯了 – nightwing

相關問題