2013-02-28 3 views
-1

Вот мой код:Сегментация Fault - Core Dump

#include <iostream> 
#include <string> 
#include <algorithm> 

using namespace std; 

string checkpalindrome(string sentence){ 
    sentence.erase(std::remove(sentence.begin(), sentence.end(), ' '), sentence.end()); 

    int unsigned i = 0; 
    for (i = 0; i < sentence.length(); i++){ 
     sentence[i] = tolower(sentence[i]); 
    } 

    if (sentence == string(sentence.rbegin(), sentence.rend())){ 
     cout << sentence << " is a palindrome." << endl; 
    } 
    if(sentence != string(sentence.rbegin(), sentence.rend())){ 
     cout << sentence << " isn't a palindrome." << endl; 
    } 
    return 0; 
} 

int main(){ 
    int x = 1; 
    string originalsentence; 
    while (x == 1){ 
     int input; 
     string sentence; 
     cout << "Press 1 to reverse a string, 2 to check a palindrome, and anything else to quit: "; 
     cin >> input; 

     if(input == 1){ 
      cout << "Enter a sentence to reverse: "; 
      cin.ignore(256, '\n'); 
      getline(cin,originalsentence); 
      sentence = originalsentence; 
      cout << string(sentence.rbegin(), sentence.rend()) << endl; 
     } 

     if(input == 2) { 
      cout << "Enter a sentence to check: "; 
      cin.ignore(256, '\n'); 
      getline(cin,originalsentence); 
      sentence = originalsentence; 
      checkpalindrome(sentence); 
     } 

     cout << "Hit 1 if you want to continue, anything else to quit: "; 
     cin >> x; 
    } 
} 

Программа дополняет и делает все, что он должен делать, кроме случаев, когда я делаю вариант 2, чтобы проверить палиндром, в самом конце, он всегда Ядровые свалки. Я попытался включить cin.ignore, но они не помогли. Есть идеи?

Редактировать 1: Поэтому я изменил три предупреждения, которые g ++ закинул. Они были palindrome.cpp:19: warning: comparison between signed and unsigned integer expressions palindrome.cpp:29: warning: no return statement in function returning non-void palindrome.cpp:35: warning: unused variable âaâ

Я изменил int i, чтобы быть без знака, вернулся 0 на 28 и удалил a. Теперь, когда я компилирую его, он не дает никаких ошибок, но когда я его запускаю, он по-прежнему падает после завершения проверки палиндрома, с этой ошибкой. terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct NULL not valid Abort (core dumped) Больше идей?

+0

Вы пытались скомпилировать с предупреждениями? Есть проблема, которую, как я думаю, большинство компиляторов заметили бы. –

+0

Отладка, чтобы определить, где именно происходит переполнение сегментации. – user1929959

+0

Так что я исправил ошибки, обновил мой код выше и дал мне новую ошибку! – stormcynk

ответ

0

Скопировано от вопроса:

Исправлено! Все, что мне нужно было сделать, это return sentence, и теперь он гаснет без ошибок