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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
GagarinSokol
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 27
13.06.2012, 22:55     Куча была повреждена. При выделении памяти #1
Всем привет.
Вот в этой строчке(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;
}
Подскажите что с этим делать...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GagarinSokol
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 27
13.06.2012, 23:00  [ТС]     Куча была повреждена. При выделении памяти #2
Вот что выскакивает в место работы оператора new.
Миниатюры
Куча была повреждена. При выделении памяти   Куча была повреждена. При выделении памяти  
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
13.06.2012, 23:07     Куча была повреждена. При выделении памяти #3
Нажимаете "прервать", попадаете в отладчик. смотрите что не так в окружающих переменных и прочие штуки. хотябы на какой строке это происходит узнаете. запосченный код нельзя к себе скопировать и запустить. так что вам придется самому хоть какие-то зацепки поискать.
GagarinSokol
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];
Yandex
Объявления
13.06.2012, 23:07     Куча была повреждена. При выделении памяти
Ответ Создать тему
Опции темы

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