Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
2 / 2 / 1
Регистрация: 26.09.2015
Сообщений: 85
1

Debug-ошибка

03.04.2016, 14:41. Просмотров 275. Ответов 3
Метки нет (Все метки)

Есть итератор, который ходит по графу в ширину или глубину


Функция begin()
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
    Iterator <Classofvertex> begin()
    {
        shared_ptr<Graph> this_ptr(this);
        switch (type)
        {
        case 'b': return Iterator<Classofvertex>(new Iterator_breadth <Classofvertex>(this_ptr, start));
        case 'd': return Iterator<Classofvertex>(new Iterator_depth <Classofvertex>(this_ptr, start));
        }
    }


Функция end()
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
    Iterator <Classofvertex> end()
    {
        shared_ptr<Graph> this_ptr(this);
        return Iterator<Classofvertex>(new Iterator_end <Classofvertex>(this_ptr));
    }


Класс Iterator
Кликните здесь для просмотра всего текста

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
template <typename Classofvertex>
class Iterator
{
    shared_ptr <Iterator_next<Classofvertex>> step;
    bool next(){ return step->next(); }
public:
    Iterator(){}
    Iterator(Iterator_next <Classofvertex> *n)
    {
        step.reset(n);
    }
    int cur()
    {
        return step->getcurrent();
    }
    Iterator& operator*()
    {
        return *this;
    }
    bool operator !=(Iterator <Classofvertex> i)
    {
        if (step->getiter()!=i.step->getiter())
            return true;
        else
            return false;
    }
    Iterator& operator++()
    {
        next();
        return *this;
    }
};


Абстрактный класс Iterator_next
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename Classofvertex>
class Iterator_next
{
protected:
    shared_ptr<Graph <Classofvertex>> g;
    int cur;
    int iter = 0;
public:
    virtual bool next() = 0;
    int getcurrent() { return cur; }
    int getiter() { return iter; }
};


Наследуемые от Iterator_next классы обходов в ширину и глубину:

Класс Iterator_breadth
Кликните здесь для просмотра всего текста
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
template <typename Classofvertex>
class Graph;
template <typename Classofvertex>
class Iterator_next;
template <typename Classofvertex>
class Iterator_breadth : public Iterator_next <Classofvertex>
{
public:
    queue <int> q;
    Iterator_breadth(shared_ptr<Graph <Classofvertex>>graph, int start)
    {
        g = graph;
        cur = start;
        q.push(start);
    }
    void quenesearch()
    {
        for (int i = 0; i < g->size; i++)
        if (g->massive[cur][i].quantity>0 && g->vertex[i].left == false && g->vertex[i].entered == false)
        {
            g->vertex[i].entered = true;
            q.push(i);
        }
    }
    bool next()
    {
        quenesearch();
        g->vertex[cur].left = true;
        q.pop();
        iter++;
        if (q.size() == 0) 
            return false;
        cur = q.front();
        return true;
    }
};


Класс Iterator_depth
Кликните здесь для просмотра всего текста
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
template <typename Classofvertex>
class Graph;
template <typename Classofvertex>
class Iterator_next;
template <typename Classofvertex>
class Iterator_depth : public Iterator_next <Classofvertex>
{
public:
    Iterator_depth(shared_ptr<Graph <Classofvertex>>graph, int start)
    {
        g = graph;
        cur = start;
    }
    bool next()
    {
        while (1)
        {
            g->vertex[cur].entered = true;
            for (int i = 0; i < g->size; i++)
            if (g->massive[cur][i].quantity>0 && g->vertex[i].left == false && g->vertex[i].entered == false)
            {
                g->vertex[i].pr = cur;
                cur = i;
                iter++;
                return true;
            }
            cur = g->vertex[cur].pr;
            if (cur == -1)
            {
                iter++;
                return false;
            }
        }
    }
};


Класс Iterator_end - конец графа
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename Classofvertex>
class Graph;
template <typename Classofvertex>
class Iterator;
template <typename Classofvertex>
class Iterator_end : public Iterator_next <Classofvertex>
{
public:
    Iterator_end(shared_ptr<Graph <Classofvertex>>graph)
    {
        g = graph;
        cur = 0;
        iter = graph->size;
    }
    bool next()
    {
        return false;
    }
};


И, собственно, сам обход в main()
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void search(Graph<Vertex> gr)
    {
        bool flag = true;
        for (auto &it : gr)
        {
            if (flag == false)
                cout << " -> ";
            else
            {
                SetConsoleCP(866);
                if (gr.type == 'b')
                    cout << "Обход в ширину: ";
                else
                    cout << "Обход в глубину: ";
            }
            flag = false;
            f(it.cur());
        }
        gr.vertexclear();
    }


На последнем шаге, когда граф уже пройден и сравнение итератора с gr.end() даёт false (см.
C++
1
bool Iterator::operator !=(Iterator <Classofvertex> i)
), то происходит вот такая Debug-ошибка. Что делать?
0
Миниатюры
Debug-ошибка  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2016, 14:41
Ответы с готовыми решениями:

ошибка debug assertion failed
при выполнении программы происходит ошибка debug assertion failed, а именно попытке завершить...

Ошибка Debug Assertion Failed
Доброго времени суток, срочно нужна помощь, такая проблема: есть программа шифрования методом...

Release работает, Debug - ошибка
Подскажите, товарищи. Есть код (взял с форума) : #include &lt;iostream&gt; #include &lt;fstream&gt;...

Ошибка при использовании debug
при использовании debug в codeblocs в консоли высвечивается ошибка,как её исправить? oc:linux...

3
Эксперт С++
8190 / 3786 / 817
Регистрация: 15.11.2014
Сообщений: 8,598
03.04.2016, 14:50 2
Цитата Сообщение от Polenoff Посмотреть сообщение
Что делать?
искать и исправлять причину порчи памяти.
0
2 / 2 / 1
Регистрация: 26.09.2015
Сообщений: 85
03.04.2016, 18:23  [ТС] 3
Цитата Сообщение от hoggy Посмотреть сообщение
искать и исправлять причину порчи памяти.
Серьёзно?

Добавлено через 52 минуты
Вы серьёзно думаете, что я написал сюда, чтобы услышать это?
0
С чаем беда...
Эксперт CЭксперт С++
7890 / 3811 / 1049
Регистрация: 18.10.2014
Сообщений: 8,117
03.04.2016, 19:13 4
В программе очень много мест, которые могут являться источниками ошибок: создание shared_ptr напрямую из this вместо использования shared_from_this сразу бросается в глаза. Передача объектов по значению, хотя конструкторы копирования/перемещения не показаны. Обращения к массивам в классе графа, хотя самого класса и инициализации этих массивов мы не видим...

Телепатов нет, в общем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2016, 19:13

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

Ошибка компиляции (Debug Assertion Failed)
Ребят помоги, что не так в этом коде? Выдает вот эту ошибку...

Ошибка выполнения: Debug assertion failed
Возникла такая ошибка,никто не сталкивался? Читал что-то про нее,но что-то непонятно... Может кто...

Ошибка debug assertion failed . line 1772
Всем привет, недавно занялась параллельным программированием, столкнулась с рядом проблем, которые...

Ошибка debug assertion failed, как избавиться?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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