вектор :: размер и ошибка сегментации - PullRequest
1 голос
/ 26 мая 2011

Почему этот код может вызвать ошибку сегментации?: /

listeners = new vector<Listener*> ();

... /* other code */

if (listeners != NULL) {
int i = listeners->size();
}

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

Тот факт, что указатель не является NULL, не означает, что он указывает на действительный vector<Listener*> объект.

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

Если у вас все еще есть проблемы, опубликуйте тест, который воспроизводит проблему (а не небольшие фрагменты кода, которые этого не делают).

1 голос
/ 26 мая 2011

Проще, чем использовать valgrind, - переместить вызов listeners->size() сразу после выделения и посмотреть, не сработает ли он даже тогда.Если нет, переместите его на несколько строк кода ниже и повторите попытку.Если это происходит с ошибками, вы просто нашли строки, которые его вызывают.Может быть, вы что-то сделали с указателем на этом пути, и это метод, чтобы найти этот кусок кода.Посмотрите на метод деления пополам .

Может работать не всегда, это скорее эвристика.

0 голосов
/ 26 мая 2011

vector<Listener*> listeners; может избавить вас от некоторых проблем или сделать причину сбоя кода более очевидной

...