Изменение значения вектора, вызывающее ошибку сегмента - PullRequest
0 голосов
/ 01 декабря 2010

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

void wdigraph::depth_first(int v) const {
    static int firstv = -1;
    static bool *visited = NULL;

    if (firstv == -1) {
            firstv = v;
            vector<bool> visited(size);
            for (int i = 0; i < size; i++) {
                    visited[i] = false;
                    cout << visited[i] << endl;
            }
    }
    cout << label[v];
  visited[v] = true;

// visit [0] = true;

Первое входное значение для функции - 0 (v = 0), и при этом оно падает.size = 5. Как вы можете видеть в конце кода, я попытался вручную установить значение true для посещения с той же ошибкой сегмента.Когда я удаляю все попытки изменить посещаемость, программа работает как обычно без ошибки сегмента.

Есть идеи, почему это нельзя изменить?Кроме того, есть еще код, но я решил не предоставлять его без необходимости.

1 Ответ

3 голосов
/ 01 декабря 2010

В вашем коде есть две разные переменные с именем visited. Внутри условия if visited находится вектор, но за пределами этого блока в последней строке:

visited[v] = true;

visited относится к bool *visited = NULL, определенному в начале вашего кода. Ошибка происходит, потому что вы пытаетесь разыменовать нулевой указатель.

...