0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 27
1

Куча была повреждена. При выделении памяти

13.06.2012, 22:55. Показов 3416. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Вот в этой строчке(83) : XY->NextXY = new StructXY;
Не понимаю что не так. После её работы выдаёт что куча повреждена.

Код функции:
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
88
89
90
91
int Graph::MinLengthBetweenTwoGraph(int a, int b, StructXY * qwerty)
{
    StructXY * XY;
    XY = qwerty;
    StructGraphData * GraphDataBegun_1, * GraphDataBegun_2;
    GraphDataBegun_1 = CentralGraphData;
    GraphDataBegun_2 = CentralGraphData;
    while (GraphDataBegun_1->GraphNum != a)
        GraphDataBegun_1 = GraphDataBegun_1->NextGraph;
    while (GraphDataBegun_2->GraphNum != b)
        GraphDataBegun_2 = GraphDataBegun_2->NextGraph;
 
    int Lenc_sris_1 = 0, Lenc_sris_2 = 0;
    while (GraphDataBegun_1)
    {
        Lenc_sris_1++;
        GraphDataBegun_1 = GraphDataBegun_1->ThisGraph;
    }
    while (GraphDataBegun_2)
    {
        Lenc_sris_2++;
        GraphDataBegun_2 = GraphDataBegun_2->ThisGraph;
    }
 
    GraphDataBegun_1 = CentralGraphData;
    GraphDataBegun_2 = CentralGraphData;
    while (GraphDataBegun_1->GraphNum != a)
        GraphDataBegun_1 = GraphDataBegun_1->NextGraph;
    while (GraphDataBegun_2->GraphNum != b)
        GraphDataBegun_2 = GraphDataBegun_2->NextGraph;
 
    double * DlinaDoPoints = new double[Lenc_sris_1 * Lenc_sris_2];
    int * SpecPointX_1 = new int[Lenc_sris_1];
    int * SpecPointY_1 = new int[Lenc_sris_1];
    int * SpecPointX_2 = new int[Lenc_sris_2];
    int * SpecPointY_2 = new int[Lenc_sris_2];
    int VremPeremen = 0;
    //перебираем точки и вычисляем длины
    while (GraphDataBegun_1)
    {
        while (GraphDataBegun_2)
        {
            double Res = sqrt( (double)( (GraphDataBegun_1->X - GraphDataBegun_2->X) * (GraphDataBegun_1->X - GraphDataBegun_2->X) + (GraphDataBegun_1->Y - GraphDataBegun_2->Y) * (GraphDataBegun_1->Y - GraphDataBegun_2->Y) ) );
                DlinaDoPoints[VremPeremen] = Res;
                SpecPointX_1[VremPeremen] = GraphDataBegun_1->X;
                SpecPointY_1[VremPeremen] = GraphDataBegun_1->Y;
                SpecPointX_2[VremPeremen] = GraphDataBegun_2->X;
                SpecPointY_2[VremPeremen] = GraphDataBegun_2->Y;
                VremPeremen++;
            GraphDataBegun_2 = GraphDataBegun_2->ThisGraph;
        }
        GraphDataBegun_2 = CentralGraphData;
        while (GraphDataBegun_2->GraphNum != b)
            GraphDataBegun_2 = GraphDataBegun_2->NextGraph;
        GraphDataBegun_1 = GraphDataBegun_1->ThisGraph;
    }
    //отсев больших
    double MinTutInMass = 0;
    int GoodPeremen = 0;
    MinTutInMass = DlinaDoPoints[0];
    for (int i = 0; i < VremPeremen; i++)
    {
        if ( DlinaDoPoints[i] < MinTutInMass )
            MinTutInMass = DlinaDoPoints[i];
    }
    for (int i = 0; i < VremPeremen; i++)
    {
        if ( DlinaDoPoints[i] > MinTutInMass )
            DlinaDoPoints[i] = -1;
        else
            GoodPeremen++;
    }
 
    for (int i = 0; i < VremPeremen; i++)
    {
        if ( DlinaDoPoints[i] != -1)
        {
            XY->Lench = DlinaDoPoints[i];
            XY->X_1 = SpecPointX_1[i];
            XY->X_2 =SpecPointX_2[i];
            XY->Y_1 = SpecPointY_1[i];
            XY->Y_2 = SpecPointY_2[i];
            XY->NextXY = new StructXY;
            XY = XY->NextXY;
            XY->NextXY = NULL;
        }
    }
    XY = NULL;
 
    return 0;
}
Подскажите что с этим делать...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2012, 22:55
Ответы с готовыми решениями:

Куча была повреждена, работа с указателями
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; using namespace std; int main() {...

Необработанное исключение: куча была повреждена
Какие типичные причины ошибки на прилагаемом скриншоте?

Куча была повреждена и прочие радости
В каждом байте BMP изображения программа подменяет последние несколько бит на биты какого-то файла...

Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат?
Доброго времени суток! Есть код класса и хотелось бы устранить в нем следующие недочеты: 1) Как...

3
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 27
13.06.2012, 23:00  [ТС] 2
Вот что выскакивает в место работы оператора new.
Миниатюры
Куча была повреждена. При выделении памяти   Куча была повреждена. При выделении памяти  
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
13.06.2012, 23:07 3
Нажимаете "прервать", попадаете в отладчик. смотрите что не так в окружающих переменных и прочие штуки. хотябы на какой строке это происходит узнаете. запосченный код нельзя к себе скопировать и запустить. так что вам придется самому хоть какие-то зацепки поискать.
1
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 27
13.06.2012, 23:07  [ТС] 4
Проблема решена.
Ошибка с 32 по 36 заменить так:
C++
1
2
3
4
5
double * DlinaDoPoints = new double[Lenc_sris_1 * Lenc_sris_2];
    int * SpecPointX_1 = new int[Lenc_sris_1 * Lenc_sris_2];
    int * SpecPointY_1 = new int[Lenc_sris_1 * Lenc_sris_2];
    int * SpecPointX_2 = new int[Lenc_sris_1 * Lenc_sris_2];
    int * SpecPointY_2 = new int[Lenc_sris_1 * Lenc_sris_2];
0
13.06.2012, 23:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2012, 23:07
Помогаю со студенческими работами здесь

"Куча была повреждена" и "<Имя проекта> вызвал срабатывание точки останова" в самых разных местах программы
Причем точки останова в этом месте нет. Исходный код очень длинный. Кто знает, как это исправить?

Повреждена куча при работе с динам. памятью. Почему? Как исправить?
Приветствую всех! Такая проблема: Вот есть код. В нем периодически появляются ошибки, а иногда и...

Повреждена куча
Запускаю - если ввожу любое число больше 2х, то все работает. Но если пишу количество: 2, программа...

Ошибка при выделении памяти
Вопрос: из-за чего программа может рушится? int *NRRow = new int ; int *NRow = new int ; int...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru