Program received signal SIGSEGV, Segmentation fault
Ok... ich bin rippen meine Haare aus... Warum bin ich immer der Segmentierung fauls, wenn ich bin vorbei ein string namens "name" mit dem Inhalt "joel" in
void person::setName(string newName)
{
personName = newName;
}
Header-Datei:
class person {
public:
int getID();
string getName();
void setID(int newID);
void setName(string newName);
private:
int personID;
string personName;
};
btw... der Aufruf der Funktion ist durch ein Kind, obwohl ich nicht sehen, wie das könnte ein Problem verursachen.
- Auch... Es läuft auf vorherigen itterations ohne Fehler... Es wird einfach nicht wie diese iteration... ich würde den link den code, aber es gibt Eimer von dem Zeug X(
- Ich glaube nicht, dass dein problem ist, die Funktion. Möchten Sie vielleicht einen Blick auf, wie Sie erstellen/Zugriff auf das Objekt person aus, die Sie verwenden.
- Dein code-Beispiel ist in Ordnung, den segfault verursacht wird woanders. Bitte Schritt für Schritt durch den code mit einem debugger zu finden, die Codezeile, die den Fehler verursacht.
- Dann reduzieren Sie bitte Ihren code so gering wie möglich und poste es hier. Es gibt kein Problem mit dem obigen code, in isolation, mindestens.
- auch die varible personName erreicht (in meinen Uhren) "das Programm gedebuggt wird signalisiert wurde, während in einem Funktion Anruf von gdb"
- Ähm, sagen Sie, dass die Zeichenfolge "das Programm gedebuggt wird..." war der Inhalt dieser Variablen? Sehr seltsam. Können Sie uns sagen, auf welcher Codezeile der Fehler auf? Erstellen Sie das Programm mit -g (bei Verwendung von GCC), dann führen Sie es in der GDB. Es wird Pause auf die Fehler. Wenn Sie nicht erkennen, wo Sie sind, dann geben Sie
bt
denen gezeigt wird, die Funktion call-stack. Blick in den stack, bis Sie einige Ihrer code-das ist die Zeile mit dem Fehler. - Um genau zu sein, das wäre die Zeile mit dem symptom. Der eigentliche Fehler könnte woanders sein.
- gdb ist nur bestätigt, dass die dieser Zeiger ungültig ist, auf den Zeitpunkt der Bewertung. +1 für die Verwendung eines Debuggers, btw
- Chalesworth / @sehe in der Tat. Ich habe versucht, die Dinge zu vereinfachen, aber vielleicht habe ich zu stark vereinfacht. Um zu zeigen, dass ich weiß, wovon ich spreche ;), schrieb ich eine Anleitung, um das Debuggen mit diesen Themen: ww2.cs.mu.oz.au/~mgiuca/253/bad.html Vielleicht wird es hilfreich sein.
- Ha - schön finden (bgcc, bisher mir nicht bekannt). Jedoch, wie debugging-STL-Iteratoren-und debugging-heap-allocators, Sie alle blass im Vergleich zu der schieren Fundamentalismus valgrind; es ist positiv check für alle nicht initialisiertes/undefined Speicher-Referenzen, sei es innerhalb oder außerhalb der Grenzen (zusätzlich zu tun, die Leck-Prüfung) - sogar ohne erfordern debug-builds, oder an einem bestimmten compiler. Rockt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf Linux, führen valgrind. Sie kompilieren mit
-g
(mit gcc), und führen Sie dann das Programm mitvalgrind
vor:Im Gegensatz zu den GCC-Lösungen, die Ihnen sagen, wenn der segfault Auftritt, valgrind in der Regel sagt Ihnen genau, Wann der erste Speicher eine Beschädigung Auftritt, so können Sie fangen die problem viel näher an der Quelle.
PS. Es reimt sich mit "flint", nicht "finden".
Wahrscheinlich, Sie dereferenzieren eines Schurken Zeiger. Durch Reine Spekulation, hast du etwas in dieser Art, vielleicht:
Könnte das problem sein:
for (i=0; i<10; i++)
Könnte es buchstäblich Hunderte von anderen Ursachen, aber da ich nicht den code, das ist mein Versuch, zu erraten plausibelsten Fehlern 😉
(Notiz an mich selbst: warum Tue ich das/ich bin nicht psychisch?)
Der code sieht gut aus, abgesehen von der Tatsache, dass Sie das kopieren von string-die ganze Zeit. Statt
sollte
Das Problem muss in der Methode invocation.