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

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

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

_block_type_is_valid при вызове delete() - C++

12.09.2011, 11:49. Просмотров 981. Ответов 1
Метки нет (Все метки)

код для генерации случайного графа

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#define m 3   //Число входящих и исходящих ребер.
#define N 200 //Минимально требуемое число вершин в графе.
 
using namespace std;
 
class node
{
public:
    int par; //Номер вершины-предка
    bool lastInLevel; //Узел – последний в уровне.
    bool suspended; //Висячий узел.
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    node* pn = new node; //Указатель на текущего обслуживаемого предка.
    node* pn2 = new node; //Указатель на текущую добавляемую вершину.
    int numOfNewNodes = 0; //Число добавляемых вершин.
    unsigned int k = 0; //Номер обслуживаемой вершины. 
    int v = 0; //Число висячих узлов.
 
      srand((int)time(NULL)); 
    
    vector<node> Node; 
    pn->par = 0;
    pn->lastInLevel = 1;
    pn->suspended = 1;
    Node.push_back(*pn); //Добавление первого узла
 
    k+=Node.size(); 
      pn->lastInLevel = 0;
    pn->suspended = 0;
 
while(k<=Node.size())//Пока существуют необслуженные вершины.
{
    *pn = Node[k-1]; 
 
    if (k==1) //Исключение случая выпадения 0 для первой вершины.
       {
           do {
           numOfNewNodes = rand()%m;
           } while(numOfNewNodes==0);
       }
    else numOfNewNodes = rand()%m;
 
    if (numOfNewNodes==0) //Обработка случая выпадения 0 
                            //для остальных вершин. 
         { 
               if (Node[k-1].lastInLevel == 1) 
                   Node[Node.size()-1].lastInLevel = 1; 
             Node[k-1].suspended = 1;
               //Обслуживаемая вершина объявляется висячей. Если она
               //последняя в уровне, тогда последняя вершина предыдущего
               //предка объявляется последней в уровне.
         } 
      else Node[k-1].suspended = 0;
 
    for (int i=0;i<numOfNewNodes;i++) //Процесс обслуживания вершины.
    {
        pn2->par = k;
        pn2->lastInLevel = 0;
        pn2->suspended = 1;
        if (i+1 == numOfNewNodes && pn->lastInLevel==1) 
               pn2->lastInLevel = 1; 
               //Вершина объявляется последней в уровне, если ее предок
               //является таковым, и данная вершина – последняя в очереди 
               //на добавление.
        Node.push_back(*pn2);
        if (pn2->lastInLevel==1 && Node.size() >= N) 
               //Проверка условия остановки построения.
               //Уровень обслужен до конца, и граница в N узлов преодолена 
               {
                    Node[Node.size()-1].lastInLevel=1; 
                    goto finish; //Прекращение построения
               }
    }
    k++;
 
}
finish:
//{…} Работа с графом
 
delete(&pn);
delete(&pn2);
delete(&Node);
return 0;
}
объясните ошибку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2011, 11:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос _block_type_is_valid при вызове delete() (C++):

При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) - C++
Функция strtok влияет на массив second, после чего его невозможно удалить, не могу понять чего. first удаляет без проблем. FILE*...

Класс - Ошибки при вызове методов: В вызове функции отсутствует список аргументов - C++
Добрый вечер всем! При изучении и написании работы столкнулся с ошибкой от которой не могу избавиться. (Т.к. очень сильно плаваю в ООП)....

Ошибка при вызове метода класса, при чтении из файла - C++
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные a01 b10 А и Б надо запихнуть в...

В чем разница между delete и delete[]? - C++
а можете еще по подробней рассказать про delete, точнее даже delete, чем именно отличается delete от delete, т.к. я попробовал...

Ошибка при delete - C++
Здравствуйте, вылетает такая ошибка, почему? Указатель верный, до этого места все нормально работает

new и delete при освобождении памяти - C++
Здравствуйте. Скажите, пожалуйста что я неправильно делаю. При освобождении памяти. Выделяем память: char **VIRTUAL = NULL; if...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
12.09.2011, 11:57 #2
Цитата Сообщение от nickrb Посмотреть сообщение
C++
1
2
3
delete(&pn);
delete(&pn2);
delete(&Node);
C++
1
2
delete pn;
delete pn2;
Node статический объект, его удалять не надо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 11:57
Привет! Вот еще темы с ответами:

Signal: SIGABRT при delete[] - C++
Здравствуйте. Есть у меня такой метод: char *Request::addGetParam(char *link, const char *pKey, const char *val) const { char...

Ошибка при использовании delete - C++
И снова здравствуйте! Пишу раз третий.Я уже готов убицца ап сцену изза этого delete.Я не понимаю что не так делаю: class CMenu { ...

Ошибка при использовании new[] / delete[] - C++
Здравствуйте. Пишу учебную программу, моделирующую движение лифта (если кто учебник Дейтелов читал, тот поймет :) ). Для начала приведу...

Ошибка при освобождении памяти (delete) - C++
Здравствуйте! Есть массив lines, созданный вот так : int *line = new int ; Потом, пытаюсь его удалить и пересоздать : delete...


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

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

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