2016-07-28 5 views
0

Ich bin etwas verwirrt über diesen Code und ich versuche zu verstehen, warum es abstürzt.Warum stürzt diese Funktion ab, wenn sie mehr als einmal aufgerufen wird?

#include <iostream> 
#include <vector> 

std::string print_array_string(std::vector<std::string> ar) 
{ 
    std::cout << "Vector size:" << ar.size() << " values:"; 
    for(auto &i: ar) { 
     std::cout << i << "; "; 
    } 
    std::cout << std::endl; 
} 


int main() { 

    std::vector <std::string> ar {"ab", "cd", "ef"}; 

    print_array_string(ar);  
    print_array_string(ar);  

    return 0; 
} 

Wenn dieser Code ausgeführt wird, erhalte ich:

Array size:3 values:ab; cd; ef; 
*** Error in `/tmp/test': free(): invalid pointer: 0x00000000006040d8 *** 
======= Backtrace: ========= 
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7f8f7898c725] 
/lib/x86_64-linux-gnu/libc.so.6(+0x7ff4a)[0x7f8f78994f4a] 
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f8f78998abc] 
/tmp/test[0x40115d] 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f8f78935830] 
/tmp/test[0x400df9] 
... 

ich nicht verstehen, was die Auswirkungen des Anrufs tun. Würde mich jemand aufklären?

danke,

-Daniel

+14

Die Funktion soll 'string' zurückzukehren, aber nichts, undefiniertes Verhalten zurückzukehren. – AlexD

+0

Ha. Vielen Dank. So ein dummer Fehler. – dmg

+0

@AlexD Das sollte als Antwort geschrieben werden, nein? –

Antwort

0

Diese Frage von AlexD in den Kommentaren gelöst wurde:

Die Funktion sollte string zurückzukehren, aber nicht zurück nichts, undefiniertes Verhalten.

(Diese Antwort wurde als pro this meta post hinzugefügt.)

Verwandte Themen