C ++ shared_ptr и чтение из класса - PullRequest
0 голосов
/ 01 августа 2011

У меня проблема с простым чтением из файла, который делит файловый указатель между несколькими объектами (у меня это работает только с простым istream, но не когда я использую общий указатель указателей istream).

Я пытаюсь прочитать весь файл в буфер (сам файл имеет длину в несколько строк.

Код компилируется, но выдает ошибку сегментации.

Класс, который использует shared_ptr:

RecordsSplitter::RecordsSplitter(char *filename):iStream( new ifstream(filename, ifstream::in|ifstream::binary))
{
}


string RecordsSplitter::buildRecord() {
       char *buffer;
        int buffer_length;
        iStream->seekg (0, ios::end)_
        buffer_length = iStream->tellg();
        cout << buffer_length;
        iStream->seekg(0, ios::beg);
        iStream->read(buffer,buffer_length);
        iStream->close();
        cout << buffer;

        return 0;
}







int main(int argc, char* argv[]) {
        RecordsSplitter *splitter;
        splitter = new RecordsSplitter(argv[2]);
        int return_num = splitter->buildRecord();
        return 0;
}

1 Ответ

0 голосов
/ 01 августа 2011

Вы объявляете свой буфер, но нигде не инициализируете его. Это необходимо в вашей функции buildRecord или в использовании malloc, если вы того пожелаете.

buffer = new char[buffer_length];

Ваша ошибка сегмента вызвана этим неинициализированным указателем

Не забудьте убрать!

delete[] buffer;
...