2013-09-09 4 views
-1

Я использую std::vector::push_back в for-loop, и в тот момент, когда я добавляю условие if, оно начинает давать ошибку.vector push_back throwing sigabrt error

if(p>0) a[p]->vec.push_back(i) 

a - это структура, содержащая вектор между прочим.

Ошибка, похоже, не зависит от условия.

struct link 
{ 
    vector<int>children; 
    int noOfchildren; 
    struct link * parent; 
} 
typedef struck link * node; 




for(i=1;i<=n;i++) 
    { 
      a[i]=(node)malloc(sizeof(element)); 
      scanf("%d",&p); 
      a[i]->parent=a[p]; 
      a[i]->noOfchildren=0; 
      if(p>0) 
      a[p]->children.push_back(i); 

    } 

a [0] инициализирован ранее.

+3

Пожалуйста, напишите больше кода. Как '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

+0

Можете ли вы включить какой-нибудь фактический код? Мы мало что можем сделать с описанием вашего кода. –

+2

Пожалуйста, включите в свой вопрос [Short, Self Contained, Compilable Example] (http://www.sscce.org/) вашего кода. Мы не против читателей; как сейчас, мы так же невежественны, как и вы. –

ответ

4

Вы назначаете неинициализированный память с malloc. Из-за этого children тоже неинициализирован. Вызов push_back на нем - UB.

Использование a[i] = new link();.

+0

мог бы сказать мне синтаксис о том, как использовать новый в приведенном выше случае – SHB

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