2016-02-27 4 views
-1
#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 

string swapLastName(const string full_name, const string new_last_name) 
{ 
string firstname; 
string newname; 

istringstream StrStream(full_name); 

// seperate first name from full name 
StrStream >> firstname; 

// combines first name with new last name 
newname=firstname +' '+ new_last_name; 

// outputs new name 
cout << "Your new name: " << newname << endl; 

} 

int main() 
{ 
string full_name; 
string new_last_name; 

//input full name 
cout << "Type your full name: "; 
//getline to get entire full name 
getline(cin, full_name); 
//input new last name 
cout << "Enter your new last name: "; 
getline(cin, new_last_name); 

swapLastName(full_name, new_last_name); 

return 0; 
} 

Type de nouveauté de C++ et nécessité de savoir pourquoi je continue d'obtenir l'erreur Segmentation fault (core dumped). Tout fonctionne ils je le veux mais après qu'il fonctionne je reçois la faute de Segmentation (noyau jeté)Erreur de segmentation de segmentation C++ (core core dumped)

+0

Activez les avertissements du compilateur. Je suis étonné qu'un compilateur ait été d'accord avec ça. –

+0

Ceci ne sera pas compilé. Est-ce que c'est pour toi? Vous ne retournerez jamais une chaîne à partir de swapLastName – NickLamp

+0

@ClickNickLamp clang compilera apparemment cela avec juste un avertissement. Ces chowderheads. –

Répondre

0

Vous ne renvoyez rien de swapLastName, mais vous lui donnez un type de retour de string. Lorsque le contrôle atteint la fin de la fonction, il n'a pas de string à retourner, de sorte qu'il se termine par un bloc de taille string de la mémoire de déchets. Le destructeur string s'exécute lorsque le temporaire est détruit, et parce que tous les champs internes n'ont pas été initialisés et n'ont aucun sens, il est probable que ce soit une tentative de désallouer une adresse aléatoire.