2010-12-01 2 views
0

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

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; 

// посещаемые [0] = TRUE;

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

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

ответ

3

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

visited[v] = true; 

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

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