5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
1

Куча была повреждена, работа с указателями

18.11.2012, 23:57. Показов 3387. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
92
93
94
95
96
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int main()
{
    int iloscproblem;
    cin >> iloscproblem; 
    do 
    {
        int ilosc;
        cin >> ilosc;
        int *coag=(int*)malloc(ilosc*sizeof(int));
        int *koniec=coag+ilosc;
        unsigned int rst=(ilosc+2)%3;
        int *RST=(int*)malloc(rst*sizeof(int));
        for(int *i=coag;i<koniec;i++)
        {
            cin>>*i;
        }
        unsigned int minus=0,counter=1;
        cin >> minus;
        for(int *i=coag+minus,*w=i-1;i<koniec;i++,counter++) //
        {
            if(counter<minus) 
            {
                *(w++)=*i;
            }
            else // 
            {
                counter=0; 
                ilosc--;
            }
        }
        unsigned int iloscpodpr=0;
        cin >> iloscpodpr;
        do
        {
            koniec = coag+ilosc;
            unsigned int dzielnik,modulo;
            cin >> dzielnik;
            cin >> modulo;
            int *rstm=RST; 
         for(int *i=coag,*w=i;i<koniec;i++) 
           {
            if(((*i)%dzielnik)==modulo) 
            {
                *(rstm++)=*i;
            }
            else
            {
                *(w++)=*i; 
            }
           }
         unsigned int meoww=rstm-RST;
 
         ilosc = ilosc - meoww;
         meoww%=3;
           if(meoww) 
           {
               do
               {
                   *(rstm++)=0;
               }
               while(meoww++<3); 
           }// S i T + zera
         unsigned int count=0,l=0;
         for(int *r=RST,*s=r+1,*t=s+1,rev=0;r<rstm;r+=3,s+=3,t+=3) // 
           {
                cout << *r << " "; 
               if (r==RST)
               {
               l = 0;
               }
               else
               {
               l=*s-rev;
               }
            if((rev= *r + (l))>0) // R(i)=S(i)-R(i-1) 
              {
               cout << *t << " ";   // Здесь программа вылетает  с ошибкой "куча была повреждена"
               count++; 
              }
           }
          cout<<endl<<count<<endl;
        }
        while(iloscpodpr--);
         if(RST) free(RST); 
      if(coag) free(coag);
    }
    while (iloscproblem--);
 
return 0;
 
}
Написал программу.
вкратце - нам дают некоторое количество чисел , мы удаляем из данного нам ряда каждое n-ое число ,
потом делим на 3 массива и выводим 3. Но при выводе выдает ошибку.повреждена куча.
может так нельзя выводить указатели или что тут не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2012, 23:57
Ответы с готовыми решениями:

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

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

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

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

3
Неэпический
17815 / 10586 / 2044
Регистрация: 27.09.2012
Сообщений: 26,627
Записей в блоге: 1
19.11.2012, 00:05 2
Вообще же ничего не понятно... разбираться долго. Что вводить то нужно?
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
19.11.2012, 00:10 3
Наверняка проблема в том, что у вас RST недостаточного размера. По 17-18 строке он у вас максимум на два инта. И в строке 70 t указывает чёрти куда, а не на выделенную память. Так что чините логику работы.

Не по теме:

И, умоляю, 1) не используйте в Си++ malloc()/realloc()/free(); 2) выучите английский.

1
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
19.11.2012, 00:20  [ТС] 4
спасибо, буду чинить.
английский и так знаю, если что , переменные имеют польские названия)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2012, 00:20
Помогаю со студенческими работами здесь

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

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

Работа с указателями
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void fun(int *p) { int...

Работа с указателями
Доброго времени суток! Прошу помощи в решении очень интересной задачи. Перепробовал все свои...


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

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

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