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

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

Восстановить пароль Регистрация
 
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
18.11.2012, 23:57     Куча была повреждена, работа с указателями #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
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. Но при выводе выдает ошибку.повреждена куча.
может так нельзя выводить указатели или что тут не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 23:57     Куча была повреждена, работа с указателями
Посмотрите здесь:

Повреждена куча при работе с динам. памятью. Почему? Как исправить? C++
C++ Куча была повреждена. При выделении памяти
Работа с указателями C++
работа с указателями C++
C++ работа с указателями
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,900
Записей в блоге: 2
Завершенные тесты: 1
19.11.2012, 00:05     Куча была повреждена, работа с указателями #2
Вообще же ничего не понятно... разбираться долго. Что вводить то нужно?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.11.2012, 00:10     Куча была повреждена, работа с указателями #3
Наверняка проблема в том, что у вас RST недостаточного размера. По 17-18 строке он у вас максимум на два инта. И в строке 70 t указывает чёрти куда, а не на выделенную память. Так что чините логику работы.

Не по теме:

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

maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
19.11.2012, 00:20  [ТС]     Куча была повреждена, работа с указателями #4
спасибо, буду чинить.
английский и так знаю, если что , переменные имеют польские названия)
Yandex
Объявления
19.11.2012, 00:20     Куча была повреждена, работа с указателями
Ответ Создать тему
Опции темы

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