我做一個程序來解決矩陣,當我試圖調試我寫了這樣的代碼:打印文本導致記憶問題
double* row = matrix[i];
int first_nz = get_first_nz_el_idx(row, size);
cout << row[first_nz];
而且有趣的是,當我把COUT說明什麼。我的結果完全改變,它開始返回隨機的大數字,如01.55e+2311
。當我刪除該cout指令時,結果是正確的。我可以以某種方式解決這個問題,但我想知道這種行爲的原因。另外,當我做'cout << "anything";
這是同樣的問題。但是當我打電話給其他功能,如pow(3, 2)
- 它沒有錯。
有功能,它總結了一些要素通過一排:
double sum_nz_el(double* row, int size)
{
int first = get_first_nz_el_idx(row, size) + 1;
int last = size - 1;
double sum;
if (first > size - 2)
return 0;
while (first < last)
{
sum += row[first];
first++;
}
return sum;
}
int get_first_nz_el_idx(double* row, int size)
{
int i = size - 2;
while (!(row[i - 1] == 0 || i == 0))
i--;
return i;
}
當我做cout << row[first_nz]
或cout << sum_nz_el(row, size)
(它並沒有真正無論哪一款,問題出現在這兩種情況下)時,函數sum_nz_el在該行通過時開始返回隨機的大數字。它應該是像Max 2.5
行可能是這樣的: 0 0 0 23 41 11
你沒有初始化'sum'。這導致未定義的行爲。在C++中默認情況下,變量不會初始化爲零。 –
sum自動初始化爲0,所以這沒什麼大不了的 – Ginko
@Ginko - Sum **在** not **時自動初始化。它是一個局部變量,因此它包含任何隨機垃圾,並且是的,0與其他任何垃圾值一樣隨機。 – PaulMcKenzie