передача векторного указателя на функцию вызывает segfault - PullRequest
0 голосов
/ 13 июня 2011

Я передаю векторный указатель на другую функцию, которая передает данные с помощью этого указателя:

void foo(vector<pair<int,int>> * vp){
 vp->push_back(pair<int,int>(1,1)); //causes segfault
}

void bar(vector<pair<int,int>> *vp = NULL){
  foo(vp);
}

Push_back вызывает segfault.

Ответы [ 3 ]

5 голосов
/ 14 июня 2011

Если вы позвоните bar без параметра, тогда vp будет NULL. Затем foo передается указатель NULL и, таким образом, эта инструкция vp->push_back сгенерирует ошибку сегментации.

3 голосов
/ 14 июня 2011

Если больно, не делай этого. Вы почти никогда не должны передавать такие вещи, как векторы, используя указатели - вместо этого используйте ссылки:

void foo(vector<pair<int,int>> & vp){
 vp.push_back(pair<int,int>(1,1));
}
3 голосов
/ 14 июня 2011

Полагаю, ваш вектор равен NULL ... вы захотите добавить проверку в foo.

void foo(vector<pair<int,int>> * vp)
{
    if (vp != NULL)
        vp->push_back(pair<int,int>(1,1));
}

Также предпочитайте использовать nullptr, если в вашем компиляторе есть поддержка C ++ 0x.

...