Ошибка сегментации c ++ с массивом строк - PullRequest
1 голос
/ 19 апреля 2011

Когда я запускаю свою программу, я получаю ошибку Segmentation Fault. Я полагаю, что это происходит от того, как я использую массив «string * words», который в частном порядке объявлен в определении класса. Я использую это здесь, в файле .cpp Кто-нибудь знает, что мне нужно изменить? вот функция, я думаю, что проблема в:

Dictionary::Dictionary(string filename){

    ifstream inF;

    inF.open(filename.c_str());

    if (inF.fail()){
      cerr << "Error opening file" <<endl;
      exit(1);
    }

    inF >> numwords;
    numwords = 3000;
    words = new string(words[numwords]);


    for(int i=0; i <= numwords - 1; i++){
      inF >> words[i];
    }
    inF.close();
  }

Ответы [ 2 ]

9 голосов
/ 19 апреля 2011

Линия:

words = new string(words[numwords]);

на самом деле должно быть:

words = new string[numwords];
4 голосов
/ 19 апреля 2011

Вам нужно научиться пользоваться отладчиком. Точная процедура зависит от того, какую систему вы используете. Но если вы запустите свой код в отладчике, отладчик остановит на той же строке , где обнаружена проблема. Как вы можете себе представить, это очень полезно для отладки.

Обратите внимание, что строка, в которой обнаружена проблема , и строка, в которой возникла проблема , могут сильно отличаться.

...