Segmentation Fault (Core dumped) in c++
Diesen code, wenn Sie ausgeführt werden die erwarteten Ausgang, aber druckt segmentation fault (core dumped)
am Ende :
string str[4] = {
"Home",
"Office",
"Table",
"Bar"
};
for (int i = 0; i<5; i++)
{
cout << str[i] << "\n";
}
Ausgabe:
Home
Office
Table
Bar
Segmentation fault (core dumped)
Was ist der signinficance der segmentation fault (core dumped). Ich suchte und es scheint einen Fehler, der Auftritt, wenn Sie versuchen, Zugriff auf nicht zugewiesenen Speicher, also, was stimmt mit dem obigen code?
Verwenden
g++ -Wall -g
zum kompilieren und Debuggen mit gdb
InformationsquelleAutor Jatin | 2012-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
sollten Sie schreiben:
#define NEL(array) sizeof(array)/sizeof(*array) ... for (int i = 0; i < NEL(str); i++)
...Ich glaube nicht, dass in Makros... sorry.
Ich glaube nicht, dass in gefährlichen Vervielfältigung von Informationen, und mein glaube ist das Rückgrat Prinzip des software-engineering.
Die oben genannten makro von Jim ist trivial zu implementieren, wie eine Funktion. Dieser code ist schlecht, wie es sicher Paare, die den code zu einem bestimmten Datensatz. Sie wollen in der Lage sein, die Daten ändern, ohne zu müssen, Scannen Sie Ihren code für die enge Kopplung und code, der muss geändert werden.
Du solltest wirklich lernen zu ermöglichen, Warnungen und debugging-Informationen für den compiler (z.B. Verwendung
g++ -Wall -g
) und lernen Sie den debugger verwendengdb
.InformationsquelleAutor Roee Gavirel
C++ - Arrays sind 0-basiert, so dass Sie keinen Zugriff auf str[4], da die Indizes reichen von 0-3.
Sie reserviert ein array der Länge 4:
Dann die Schleife beenden müssen, wenn:
Eher als
i < 5
.InformationsquelleAutor Nadir Sampaoli
Zähler sollte von null bis drei. For-Schleife, muss verändert werden.
InformationsquelleAutor Tariq Mehmood
str
ist einstring[4]
, so hat es 4 Elemente, was bedeutet, dass Indizes 0-3 gültig sind. Sie werden auch Zugriff auf index 4.InformationsquelleAutor Kevin
Sind Sie immer "segmentation fault", weil Sie versuchen auf ein element, das nicht existiert, d.h.
str[4]
Die möglich sind die Indizes von 0-3.
InformationsquelleAutor Srijan
Ihnen Zugriff auf die Daten über das Ende des Arrays.
str
ist ein array der Größe 4, aber Sie sind auf einem fünften element in der Schleife, das ist, warum man einen seg faultInformationsquelleAutor mathematician1975