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

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

Восстановить пароль Регистрация
 
nickrb
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 37
12.09.2011, 11:49     _block_type_is_valid при вызове delete() #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++ _BLOCK_TYPE_IS_VALID при вызове деструктора класса
new и delete при освобождении памяти C++
C++ Деструктор и _Block_Type_Is_Valid (pHead->nBlockUse)
C++ _BLOCK_TYPE_IS_VALID(Phead_nBlockUse)
При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) C++
C++ Ошибка при освобождении памяти (delete)
C++ При вызове деструктора вылазит ошибка _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
C++ Signal: SIGABRT при delete[]
Ошибка Expression: _BLOCK_TYPE_IS_VALID C++
C++ При вызове деструктора выдается ошибка _BLOCK_TYPE_IS_VALID (pHead->nBlockUse)
C++ Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
C++ _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.09.2011, 11:57     _block_type_is_valid при вызове delete() #2
Цитата Сообщение от nickrb Посмотреть сообщение
C++
1
2
3
delete(&pn);
delete(&pn2);
delete(&Node);
C++
1
2
delete pn;
delete pn2;
Node статический объект, его удалять не надо.
Yandex
Объявления
12.09.2011, 11:57     _block_type_is_valid при вызове delete()
Ответ Создать тему
Опции темы

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