Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
EmpthyNick
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 5
#1

Функция не видит выделенной памяти под глобальные переменные - C++

17.02.2013, 21:56. Просмотров 374. Ответов 8
Метки нет (Все метки)

При решении задачи с алгоритмом поиска в глубину возникла проблема: описание переменных происходит над п/п алгоритма, выделение памяти под них происходит в программе, а при вызове п/п она "не видит" выделенной памяти, из за чего обращается к несуществующему элементу, и происходит ошибка:
vector<bool> iterator not derefencable.

Что с этим можно сделать?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
 
int n;
vector<bool> used;
vector<int> enter_time;
vector<int> exit_time;
vector<vector<int> > gr;
int enterT = 0;
int exitT = 0;
 
 
void dfs(int r)
{
    used[r] = true;
    enter_time[r] = enterT++;
    for (int i = 0; i < gr[r].size(); i ++)
        if (!used[gr[r][i]])
            dfs(gr[r][i]);
    exit_time[r] = exitT++;
}
void main()
{
    ifstream inputF("D:/input.txt");
    //int n;
    inputF >> n;
    cout << n;
    cout << "    ";
 
    // Ввод и преобразование данных
    while (!inputF.eof())
    {
        vector<int> temp;
        int k;
        inputF >> k;
        for (int j = 0; j < k; j++)
        {
            int t;
            inputF >> t;
            temp.push_back(t);
        }
        gr.push_back(temp);
    }
    // Запуск dfs-п/п
    vector<int> enter_time(n);
    vector<int> exit_time(n);
    dfs(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 21:56     Функция не видит выделенной памяти под глобальные переменные
Посмотрите здесь:
C++ Освобождение памяти, выделенной под массив
Обнулить кусок памяти (выделенной под указатели) по быстрому C++
Ошибка при высвобождении ранее выделенной памяти под динам. массив C++
C++ Косвенное обращение к методам. Освобождение памяти,выделенной под двумерный динамический массив
C++ Интересное задание (Сколько ячеек памяти выделится под переменные?)
Глобальные переменные C++
C++ Глобальные переменные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
17.02.2013, 22:00     Функция не видит выделенной памяти под глобальные переменные #2
Не используй std::vector<bool>.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
17.02.2013, 22:02     Функция не видит выделенной памяти под глобальные переменные #3
а где у тебя выделение памяти под элементы вектора?
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
17.02.2013, 22:06     Функция не видит выделенной памяти под глобальные переменные #4
vector<bool> не является контейнером и не может быть использован так, как его хочешь использовать ты.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
17.02.2013, 22:07     Функция не видит выделенной памяти под глобальные переменные #5
EmpthyNick, vector<bool> used(10) - вектор содержит 10 переменных типа bool со значением false
или std::fill
EmpthyNick
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 5
17.02.2013, 22:12  [ТС]     Функция не видит выделенной памяти под глобальные переменные #6
Цитата Сообщение от villu Посмотреть сообщение
а где у тебя выделение памяти под элементы вектора?
Тут забыл дописать, удалял много, получилось вот так, перед вызовом п/п

C++
1
2
3
4
5
// Запуск dfs-п/п
vector<bool> used(n);
vector<int> enter_time(n);
vector<int> exit_time(n);
dfs(0);
Но все равно, та же самая ошибка.

Добавлено через 1 минуту
Цитата Сообщение от Olivеr Посмотреть сообщение
EmpthyNick, vector<bool> used(10) - вектор содержит 10 переменных типа bool со значением false
или std::fill
Это помогло, но теперь тоже самое с вектором gr, в который были введены данные из текстового файла.

Добавлено через 2 минуты
Цитата Сообщение от Герц Посмотреть сообщение
vector<bool> не является контейнером и не может быть использован так, как его хочешь использовать ты.
Спасибо, изменю
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
17.02.2013, 22:19     Функция не видит выделенной памяти под глобальные переменные #7
C++
1
2
3
4
5
/ Запуск dfs-п/п
vector<bool> used(n);
vector<int> enter_time(n);
vector<int> exit_time(n);
dfs(0);
это не решит твои проблемы. потому что этот used(n) это не тот самый used, который ты используешь в dfs. глобальный used у тебя пустой.
EmpthyNick
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 5
17.02.2013, 22:21  [ТС]     Функция не видит выделенной памяти под глобальные переменные #8
Цитата Сообщение от villu Посмотреть сообщение
C++
1
2
3
4
5
/ Запуск dfs-п/п
vector<bool> used(n);
vector<int> enter_time(n);
vector<int> exit_time(n);
dfs(0);
это не решит твои проблемы. потому что этот used(n) это не тот самый used, который ты используешь в dfs. глобальный used у тебя пустой.
Можете сказать, как обратиться к глобальному used?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2013, 22:23     Функция не видит выделенной памяти под глобальные переменные
Еще ссылки по теме:
Глобальные переменные C++
C++ глобальные переменные
C++ Глобальные переменные
C++ Глобальные переменные
C++ Глобальные переменные

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
17.02.2013, 22:23     Функция не видит выделенной памяти под глобальные переменные #9
C++
1
2
3
4
used.resize(n);
enter_time.resize(n);
exit_time.resize(n);
dfs(0);
Yandex
Объявления
17.02.2013, 22:23     Функция не видит выделенной памяти под глобальные переменные
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru