2016-04-22 10 views
-1

Ich habe eine Zeichenfolge-Variable in einem Vektor, der eine Zeichenfolge erhält.String-Variable innerhalb Vektor verursacht massiven Fehler (WinMainCRTStartup)

#include <vector> 
#include <string> 
using namespace std; 

vector <string> buffer; 

main(int argc, char *argv[]){ 
    buffer[0] = "foobar"; 
    return 0; 
} 

Es bewirkt, dass diese massive Compiler-Fehler Befehlszeile, die mit Beginn des Einsatzes:

Multiple Definition von WinMainCRTStartup ...

Dann geht der Fehler mit etwa 500 Zeilen inkohärent Sachen. Ich habe erfolgreich andere C++ - Programme mit diesem Compiler (GNU-Compiler) kompiliert. Ich weiß nicht, warum dieses spezielle Programm einen Fehler verursacht.

+0

Verfolgen Sie den vollständigen Fehler. –

+1

Wie bauen Sie Ihr Programm auf? Wie haben Sie Ihr Projekt eingerichtet? Welche IDE (falls vorhanden) benutzt du? Welche Version? Welcher Compiler? –

+1

Auch Vektoren sind nicht wie Arrays, wenn Sie einen Vektor erstellen, ist er leer und jede Indizierung in ihm wird außerhalb der Grenzen sein und zu * undefiniertem Verhalten * führen. –

Antwort

0

Es gibt zwei Probleme. Die erste von allen müssen Sie Rückgabetyp zu Haupt hinzufügen:

int main() { 
    ... 
} 

Sekunde. Sie haben einen leeren Puffer, wenn Sie also Puffer [0] = "irgendwas" machen, werden Sie den Speicher beschädigen (was später entdeckt wird, wenn eine andere Funktion auf das beschädigte Objekt zugreift). Dies ist passiert, weil operator [] für Vektor deaktiviert ist. Wenn Sie es wie folgt ändern:

int main() { 
    buffer.at(0) = "foobar"; 
    return 0; 
} 

Sie werden eine Ausnahme erhalten.

+2

Aber wie erklärt das einen Fehler bei der Kompilierung? –

+0

@HarryJohnston guten Punkt! :) In der Kompilierzeit müssen wir einfach hinzufügen: int main() statt main() ... :) –

Verwandte Themen