2017-03-02 10 views
-1

Ich lernte, wie man Header und ein wenig String-Manipulation ans und erstellen und verwenden, da ich keinen Fehler hatte und mein Programm ausführen konnte, bekam ich einen Segmentierungsfehler. Mein Programm funktioniert, aber ich möchte Segfault für die Zukunft vermeiden. können Sie sehen, wo der segfault ist?Segmentierung Fehler für Anfänger

main.cpp

#include <string> 
#include <stdio.h> 
#include <iostream> 
#include <header_test.h> 
//using namespace std; 

int main() 
{ 
    printf("hello world\n"); 

    string x = test(); 

    return 0; 
} 

header_test.h

#ifndef TEST_H 
#define TEST_H 

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

string test(); 

#endif 

test.cpp

#include <header_test.h> 

string test() 
{ 
    string text; 
    cout << "Enter your name: \n"; 
cin >> text ; 

cout << "your name :\n" << text<< "\n"; 


string result; 
string s1 = "addition de "; 
string s2 = " string \n"; 
result = s1 + s2; 

cout << "\n" << result ; 

} 
+4

Die 'test' Funktion nicht * Rückgabe * alles:

Da es sieht aus wie result ist, was Sie zurückkehren möchten, sollten Sie gerade hinzufügen, dies als die letzte Zeile in der Funktion gut sein. Der Compiler hätte Sie davor warnen sollen. –

+0

Ein anderes Beispiel, wenn die höchste und pedantischste Warnung Compiler-Optionen verwendet worden wäre, würden Sie wissen, was das Problem ist. –

+0

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

Antwort

2

test.cpp eine return-Anweisung fehlt. Dies führt dazu, dass schlimme Dinge passieren. return result;