2014-03-13 41 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