2014-03-13 42 views
0

我不明白爲什麼無意中修改了[i]的值?由註釋標記的行只能修改數組p的值,而不能修改數組的值。我已經注意到數組的值正在被修改爲副作用。我無法弄清楚爲什麼。min()函數的副作用

#include <iostream> 
#include <unordered_map> 

using namespace std; 

int main() { 
    unsigned int N, Q, K; 
    unsigned int a[N], p[N][N]; 
    unordered_map<unsigned int, unsigned int> counts_vector; 
    cin >> N; 
    for (unsigned int i = 0; i < N; i++) { 
     cin >> a[i]; 
     p[i][i] = a[i]; 
     for (unsigned int j = 0; j < i; j++) { 
      p[j][i] = min(p[j][i - 1], a[i]); // why is the value of a[i] getting modified? 
     } 
    } 
    for (unsigned int k = 0; k < N; k++) { 
     cout << "a: "<<a[k]<< endl; 
    } 
} 
+0

是什麼的一個'[N]的大小期間'此刻的代碼 '達到' 聲明執行時間? – Grzegorz

+1

min不會更改傳遞給它的值。您確定首先使用正確的值填充它。 –

+0

@Grzegorz N = 5 – ibp73

回答

2

在給出N值之前,您不應該聲明unsigned int a[N], p[N][N];

變化

unsigned int N, Q, K; 
unsigned int a[N], p[N][N]; 
unordered_map<unsigned int, unsigned int> counts_vector; 
cin >> N; 

unsigned int N, Q, K; 
cin >> N; 
unsigned int a[N], p[N][N]; 
unordered_map<unsigned int, unsigned int> counts_vector; 
+1

但是在C++ 14之前(或接受編譯器擴展) –

+0

或者只是使用std :: vector。 – shawn1874