2015-09-29 2 views
-1

У меня есть вектор shared_ptr<SomeClass> с именем allParts.Вектор shared_ptr дает seg-ошибку, когда экземпляры в векторе доступны

код, как показано ниже:

void function thisIsWhereItStarts(){ 
    vector<shared_ptr<SomeClass> > allParts; 
    for(i=0;i<N;i++){ 
     allParts.push_back(function_which_returns_shared_ptr_someclass()); 
    } 

// Then I use this vector as below: 
    for(vector<shared_ptr<SomeClass> >::iterator it = allParts.begin(); it!=allParts.end(); it++){ 
     (*it)->function_of_SomeClass() ; // THIS GIVES SEGMENTATION FAULT 
    } 
} 

Я использовал вектор указателей несколько раз прежде, но это первый раз я использую shared_ptr.

Функция, которая возвращает shared_ptr, как это:

shared_ptr<SomeClass> function_which_returns_shared_ptr_someclass(){ 

    shared_ptr<SomeClass> part(new SomeClass); 
    if(part->some_function(some_parameter)){ 
     return part; 
    }else{ 
     return shared_ptr<SomeClass>(); 
    } 

} 
+1

Как выглядит 'function_which_returns_shared_ptr_someclass()'? – syntagma

+0

Ошибка в коде не отображается, вполне возможно, в функции, которая возвращает 'shared_ptr'. –

+1

Пожалуйста, укажите [mcve]. Мне не нужно было рассказывать об этом кому-то с речью на 1к. –

ответ

6

Вы push_back даже пустой shared_ptr. Затем вы разыгрываете каждый shared_ptr в векторе. Вызов пустого shared_ptr не удастся. Либо не push_back пустые указатели, либо не разыгрывать их.

+0

Короткие, но функциональные. – Puppy

+0

Спасибо. Не удалось это заметить. Я добавил нулевую проверку указателя перед разыменованием. –

Смежные вопросы