2015-02-07 2 views
0

안녕하세요. 세분화 오류로 인해 코드 검토가 필요합니다. 내 2D 벡터에 메모리가 할당되지 않았기 때문에 그 것이지만 어떻게해야합니까?C++, 2D 벡터 분할 오류

std::vector <std::vector <std::string>> pdf_report::random_data (int num_entries, int report_type) 
{ 
    std::vector <std::vector <std::string>> printer_control; 
    int card_num_max = 999899, card_num_min = 100000; // card number 
    int vol_ent_max = 1000, vol_ent_min = 10; // volume entered 
    int vol_disp_max = 7, vol_disp_min = 0; // volume dispensed 
    int cn_type_max = 10, cn_type_min = 1; // card type 
    int charge_amt_max = 400, charge_amt_min = 2; 
    int vol_bal_max = 6000, vol_bal_min = 0; 
    int auth_num_max = 9999, auth_num_min = 1000; 
    srand (time (NULL)); // seed rand() with new values 

    switch (report_type) 
    { 
     case 1: // Report 1: Card Number, Volume Entered, Volume Dispensed 
     { 
      // fill a string array with random values 
      for (int k = 0; k < num_entries; k++) 
      { 
       int randNum = 0; 
       int randNum1 = 0; 
       int randNum2 = 0; 
       int randNum3 = 0; 

       // fill column 0 for Card Number 
       randNum = rand() % (card_num_max - card_num_min) + card_num_min; // generate random numbers inside range 
       printer_control [k][0] = int_to_str (randNum); // set string array element equal to converted int 

       // fill column 1 for Volume Entered 
       randNum1 = rand() % (vol_ent_max - vol_ent_min) + vol_ent_min; // generate random numbers inside range 
       printer_control [k][1] = int_to_str (randNum1); // set string array element equal to converted int 

       // fill column 2 for Volume Dispensed 
       randNum2 = rand() % (vol_disp_max - vol_disp_min); // generate random numbers inside range 
       randNum3 = randNum1 - randNum2; // volume dispensed could be lower than the number entered, but not higher 
       printer_control [k][2] = int_to_str (randNum3); // set string array element equal to converted int 
      } 
      break; 
     } 
    } 

    return printer_control; 
} 

나는 더 많은 경우가 있지만 일하기를 원한다면 다른 사람들에게 복사해야합니다. 도와 줘서 고마워.

+0

그래서, 당신이 알고 당신의 코드 SEG-오류, 메모리를 할당하지 않은이 작업을 수행하는 방법을 알고하지 않기 때문에 :

는 이렇게, 당신의 vector<vector<string> >를 초기화합니다. 그렇다면 메모리를 할당하는 방법을 묻지 않는 이유는 무엇입니까? :/"내 2D 벡터"슬로건 대신 변수 이름을 제공하면 질문을 더 쉽게 읽을 수 있습니다. – doc

+0

필자가 필요한 것은 printer_control.resize (3)입니다. 3 열이 있기 때문에 – Adam

+0

printer_control의 크기는 얼마입니까? num_entries x num_entries 또는 num_entries x 3? – Guilherme

답변

1

코드에서 printer_control이 num_entries x 3의 매트릭스라고 가정합니다.

printer_control.resize (num_entries); 
for (int i=0; i<num_entries; i++) 
    printer_control[i].resize (3); 
+1

이제 작동합니다. 도와 줘서 고마워. 따라서 첫 번째 크기 조정은 y 방향으로 수정되고 두 번째 크기 조정은 x 방향으로 수정됩니다. 2D 벡터는 2D 배열보다 덜 직관적입니다. – Adam

+1

아니요, 먼저 행 수와 두 번째 열 수의 크기를 조정하십시오. – Guilherme

+0

예, 당신 말이 맞아요, 고마워요. – Adam