2016-02-27 9 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; 
} 

Вид нового на C++ и нужна некоторая помощь в том, почему я продолжаю получать ошибку с разделением (core dumped). Все работает, что я хочу, но после того, как он запускается, я получаю ошибку сегментации (ядро сбрасывается)C++ Ошибка сегментации (сбрасываемая сердцевина)

+0

Включите предупреждения компилятора. Я поражен, что компилятор на самом деле был в порядке. –

+0

Это не скомпилируется. Это для вас? Вы никогда не возвращаете строку из swapLastName – NickLamp

+0

@NickLamp clang, по-видимому, скомпилирует это с помощью всего лишь предупреждения. Эти головорезы. –

ответ

0

Вы ничего не дадите от swapLastName, но вы даете ему тип возврата string. Когда управление достигает конца функции, оно не возвращает string, поэтому оно заканчивается блоком памяти мусора размером string. Деструктор string запускается, когда временное уничтожается, и поскольку все внутренние поля не инициализированы и бессмысленны, он, вероятно, segfaults пытается освободить какой-либо случайный адрес.