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

Ошибка при использовании new[] / delete[] - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ <method name> is not a member of <class> при любом типе возвращаемого значения, кроме int http://www.cyberforum.ru/cpp-beginners/thread892923.html
Проблема в следующем, есть класс описанный в .h файле, методы класса описаны в .cpp, при компиляции ошибка: BMPImage.cpp(3): E2316 'BMPImage::GetImage()' is not a member of 'BMPImage' Заметил, что...
C++ Разбор Блок схемы Здравствуйте.Не могу сделать блог схемы..Буквально вчера показал преподавателю,то что я делал ночью(а именно блок схемы)...После увиденного он пришел в ужас и пол пары косился на меня(как будто я не... http://www.cyberforum.ru/cpp-beginners/thread892915.html
C++ Программа разветвленной структуры
даны четыре числа. Вычислить сумму положительных среди них чисел
C++ Отладить программу
Подставить в заданное выражение знаки +,-,*,/ так, чтобы выражение было истинным: ((((((1 2) 3) 4) 5) 6)=36 Не могу отладить программу, вроде бы все правильно но не работает. Вот мой код:...
C++ Графы http://www.cyberforum.ru/cpp-beginners/thread892903.html
Помогите у меня проблема. В графе n вершин. Найти три вершины удаленных от вершины A на одинаковом расстоянии. Гарантируется, что такие вершины есть. Входные Данные В первой строке входного...
C++ Вычислительная геометрия Помогите пожалуйста решить, кому не трудно. Вне круга Даны координаты n точек (xi,yi), i=1,2,…,n (n≤100). Указать номера тех точек, которые лежат вне круга с центром в точке (x,y) и радиусом R.... подробнее

Показать сообщение отдельно
Mihail Samohval
5 / 5 / 1
Регистрация: 06.06.2013
Сообщений: 23

Ошибка при использовании new[] / delete[] - C++

06.06.2013, 08:50. Просмотров 387. Ответов 5
Метки (Все метки)

Здравствуйте. Пишу учебную программу, моделирующую движение лифта (если кто учебник Дейтелов читал, тот поймет ). Для начала приведу часть кода, в котором, как мне кажется, заключена ошибка:

Есть три класса: Floor - этаж, Psng - пассажир. И главный класс Build - здание, в котором они все будут взаимодействовать.

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
class Build {
public:
        Build(int );
..............................
        Lift L;
        Psng *Pas;
        
private:
        Floor *F;
        int numFloors;
        int numPsngs;
 
 
};
///////////////////////////////////// 
#pragma package(smart_init)
Build::Build (int n)     // создает здание с опр кол-вом этажей
{
        numFloors = n; // инициализация всех переменных класса.
        numPsngs = 0;
        Pas = NULL; F = NULL;
        Pas = new Psng[2];
        F = new Floor[numFloors];
}
Build::~Build ()
{
        delete [] Pas;
        delete [] F;
}
 
void Build::createPsng()  // шанс создания пассажира. 
{
        int n = 20; // вероятность создания пассажира
        if (random(100)<n)
                {
                Psng Pswap;
                if(findFreeFloor(Pswap))
                {
                Psng *P1 = new Psng [numPsngs+2];
                for (int i = 1; i<=numPsngs;i++)  P1[i] = Pas[i];
                P1[numPsngs+1] = Pswap;
                delete [] Pas; Pas = NULL;
                numPsngs++;
                Pas = new Psng[numPsngs+1];
                for (int i = 1; i<=numPsngs;i++) Pas[i] = P1[i];
                delete [] P1; P1 = NULL;
                movingLift(Pswap.location , Pswap.destination );
                }
                }
 
}
 
void Build::deletePsng( int del)  // ВОТ ТУТ ВРОДЕ ОШИБКА
{
        Psng *P1 = new Psng [numPsngs];
        for (int i=1; i<=numPsngs;i++)
        if (i<del) P1[i] = Pas[i]; else
         P1[i] = Pas[i+1];
         delete [] Pas;
         Pas = NULL;
         numPsngs--;
         Pas = new Psng[numPsngs+1];
         for (int i = 1; i<=numPsngs;i++) Pas[i] = P1[i];
         delete [] P1;
         P1 = NULL;
}
вот. Проблема возникает при удалении какого-нибудь пассажира из массива - удаляет его корректно, сдвигает остальных, все здорово, но сбивается массив Floor *F: в классе Floor есть переменная типа bool и после вызова функции deletePsng(i); в цикле, у всего массива F значения этой переменной bool становятся странными: 47 92 136 и т.д.

Я подозреваю, что при удалении я как-то некорректно высвобождаю или выделяю память и из-за этого что-то влезает в мой массив *F. Попробовал по совету указателям присваивать нулевые значения, попробовал написать деструкторы классов - ничего не меняется.

Очень надеюсь на помощь! Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru