2013-09-16 1 views
1

내 코드의 최종 출력 벡터에서 작업하고 있습니다. 내가 뭘 찾았는지 전 벡터 크기가 전후에 나는 그것에 어떤 요소도 추가하지 않더라도 함수에 전달한다는 점이다. 벡터를 참조로 전달하고 있습니다. 문제의 함수는 NM_sim이며 왜 이런 일이 일어나고 있는지 디버그 할 수 없습니다. 시간과 도움에 감사드립니다! 나는 NM_sim 함수에 전달하기 전과 후에 벡터의 크기를 추적하고있다. NM_sim을 호출하면 벡터 크기가 변경됩니다.함수에 전달한 후 벡터 크기가 변경됩니다.

state_type는 표준 : : 벡터로 설명

random_select(gene_ind, n_ka_temp, n_kd_temp, kavec_pert, kdvec_pert, kaval_pert, kdval_pert); 
      state_type param_pert; 
      param_pert.push_back(param[0]); 
      param_pert.push_back(param[1]); 
      param_pert.push_back(param[2]); 
      param_pert.insert(param_pert.end(),kaval_pert.begin(),kaval_pert.end()); 
      param_pert.insert(param_pert.end(),kdval_pert.begin(),kdval_pert.end()); 
      transform(param_pert.begin(),param_pert.end(),param_pert.begin(),powof10()); 
      cout << "########## Value of param size is: " << param.size() << " ################" << endl; 
      MC_sim (x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert); 
      for (int i = 0; i < param.size(); i++)cout << "########## Value of param from MC is: " << param[i] << " ################" << endl; 
      cout << "########## Value of param size is: " << param.size() << " ################" << endl; 
      cout << "The optimized value of error from MC calculation is: " << error_pert << endl; 
      NM_sim(x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert); 
      cout << "The optimized value of error from NM calculation is: " << error_pert << endl; 

내부 NM_sim :

void NM_sim(const state_type &x_d, const state_type &t_d, const state_type &mean_xd, myFex_single &fex_nm, myJex_single &jex_nm, const int &gene_ind, const int nka, const int nkd, double &error_ode, state_type &param) 
{ 
    const int param_size = 3 + nka + nkd; 
    cout << "########## Value of error from MC is: " << error_ode << " ################" << endl; 
    cout << "########## Value of param size is: " << param.size() << " ################" << endl; 
    for (int i = 0; i < param.size(); i++)cout << "########## Value of param from MC is: " << param[i] << " ################" << endl; 
.... 
} 

내가 얻을 출력은 다음과 같습니다

########## Value of param from MC is: 0.789519 ################ 
########## Value of param from MC is: -0.47315 ################ 
########## Value of param from MC is: -0.693194 ################ 
########## Value of param from MC is: 0.368322 ################ 
########## Value of param from MC is: 0.298118 ################ 
########## Value of param from MC is: 0.883191 ################ 
########## Value of param size is: 6 ################ 
The optimized value of error from MC calculation is: 0.000329494 
########## Value of error from MC is: 0.000329494 ################ 
########## Value of param size is: 13 ################ 
########## Value of param from MC is: 0.789519 ################ 
########## Value of param from MC is: -0.47315 ################ 
########## Value of param from MC is: -0.693194 ################ 
########## Value of param from MC is: 0.368322 ################ 
########## Value of param from MC is: 0.298118 ################ 
########## Value of param from MC is: 0 ################ 
########## Value of param from MC is: 0 ################ 
########## Value of param from MC is: 0.883191 ################ 
########## Value of param from MC is: 0 ################ 
########## Value of param from MC is: 0 ################ 
########## Value of param from MC is: 0 ################ 
########## Value of param from MC is: 0 ################ 
########## Value of param from MC is: 0 ################ 

여기에 내 코드의 일부입니다 벡터 크기는 NM_sim으로 전달한 후 MC_sim 이후 6에서 13으로 바뀝니다. 그것을 고치는 방법에 대한 생각이나 의견은 높이 평가됩니다! 감사!

+4

벡터를 'const'참조로 전달하면 버그가 분명해질 것입니다. (코드에서 보았을 때 연산자 (operator)를 너무 높게 지정하면 벡터에 새로운 요소가 생깁니다.) –

답변

1

비교 크기가 param_pertparam입니다. 이 둘은 같은 벡터가 아닙니다.

cout << "..." << param.size() << "..." << endl; 
MC_sim (x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert) 

시도 :

cout << "########## Value of param size is: " << param_pert.size() << " ################" << endl; 
+0

찾아 주셔서 감사합니다. random_selec 함수에 문제가 있습니다. 나는 그것을 더 분석 할 필요가있다. – rtmi

+0

코드의 초기 부분에 버그로 인해 벡터 크기가 바뀌는 최종 오류가 발생했습니다. 내 오타가 코드의 잘못된 부분을 분석하게되었습니다. 버그를 수정하고 오류를 발견해 주셔서 감사합니다. – rtmi

0

단계 : 앞뒤로 통과를 제외하고 모든 코드를 제거합니다. 아직도 문제가 있습니까? 그렇지 않다면 문제는 기능 코드에 있습니다. 그래도 문제가 계속되면 문제를 일으키는 원인이 무엇인지 알 수 있습니다.

관련 문제