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

Очистка памяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
05.11.2010, 03:14     Очистка памяти #1
Вот сделал лабу и все работает отлично, но осталось последнее new выделяет память мне нужно
добавить функцию которая будет вызыватся в конце и чистить память но как это сделать хз пробовал не получилось((

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
#include <iostream>
#include <cstdlib>
#include <fstream>
#include<clocale>
using namespace std;
 
 
struct LIST {
int info;
LIST *next;
};
 
int proverka(LIST *head,int h, int x0,int s)
{ int c=0;
  int tmp=x0;
  LIST *p = head;
 
for(int i=0;i<s;i++)
    {
      if(p->info != tmp)
        {c=0;
         return c;
        }
      else
       {
       c++;
       p=p->next;
       tmp=tmp+h;
       }
    }
    return c;
}
 
int add(fstream &fin,LIST *p)
{int prov=0;
    while( !fin.eof() )
    {
        fin >> p->info;
        p->next =new LIST;
        p=p->next;
        prov++;
    }
  return prov;
}
 
int main()
{ setlocale(LC_ALL, "rus");
    int h,s;
    int x0;
    fstream fin;
    LIST *head;         
    head = new LIST;
    LIST* p = head;
fin.open("fin.txt",ios_base::in);
    if(fin.is_open()==false)
        cout << "ошибка открытия fin.txt!!!";
    
    cout << "Введите начальное значение:" << endl;
     cin >> x0;
    cout << "Введите шаг:" << endl;
     cin >> h;
s=add(fin,p);
    
  if (s == proverka(head,h,x0,s))
    cout << "podxodit";
  else 
    cout << "ne podxodit"; 
return 0;
 
 
}
Добавлено через 27 минут
C++
1
2
3
4
5
6
7
8
9
10
11
void del(LIST *head,int s)
{int i;
LIST *tmp=head;
 
    while ( head )
    {
        tmp = head->next;
        delete head;
        head = tmp;
    }
}
сделал такую функцию но программа завернает работу ....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2010, 03:14     Очистка памяти
Посмотрите здесь:

C++ Очистка памяти массива (С++)
C++ Очистка памяти
Очистка памяти - ошибка C++
C++ Очистка памяти
C++ Очистка памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.11.2010, 03:21     Очистка памяти #2
Простенький стек. Обратите внимание на функцию clear().
Реализация хламовая конечно, трабл в том, что нужно, чтобы менялось head в главном. По сути наверное хватит и просто указателя. Секунду. Нет. Одного указателя не хватит. Через класс проще. Хех.

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
#include <iostream>
 
struct Lst
{
    int t;
    Lst* next;
};
 
void clear(Lst** head)
{
    while(*head)
    {
        Lst* p=*head;
        *head=(*head)->next;
        delete p;
    }
}
 
void constr(Lst** head, int t)
{
    Lst* p=new Lst;
    p->t=t;
    p->next=0;
    if(!*head)
    {
        *head=p;
    }
    else
    {
        p->next=*head;
        *head=p;
    }
}
 
int main()
{
    Lst* head=0;
    constr(&head, 5);
    constr(&head, 10);
    constr(&head, 15);
    constr(&head, 20);
    clear(&head);
    return 0;
}
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
05.11.2010, 03:35  [ТС]     Очистка памяти #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
#include <iostream>
#include <cstdlib>
#include <fstream>
#include<clocale>
using namespace std;
 
 
struct LIST {
int info;
LIST *next;
};
 
int proverka(LIST *head,int h, int x0,int s)
{ int c=0;
  int tmp=x0;
  LIST *p = head;
 
for(int i=0;i<s;i++)
    {
      if(p->info != tmp)
        {c=0;
         return c;
        }
      else
       {
       c++;
       p=p->next;
       tmp=tmp+h;
       }
    }
    return c;
}
 
int add(fstream &fin,LIST *p)
{int prov=0;
    while( !fin.eof() )
    {
        fin >> p->info;
        p->next =new LIST;
        p=p->next;
        prov++;
    }
  return prov;
}
 
void clear(LIST** head)
{
        while(*head)
        {
                LIST* p=*head;
                *head=(*head)->next;
                delete p;
        }
}
 
int main()
{ setlocale(LC_ALL, "rus");
    int h,s;
    int x0;
    fstream fin;
    LIST *head=0;           
     head = new LIST;
    LIST* p = head;
fin.open("fin.txt",ios_base::in);
    if(fin.is_open()==false)
        cout << "ошибка открытия fin.txt!!!";
    
    cout << "Введите начальное значение:" << endl;
     cin >> x0;
    cout << "Введите шаг:" << endl;
     cin >> h;
s=add(fin,p);
    
  if (s == proverka(head,h,x0,s))
    cout << "podxodit";
  else 
    cout << "ne podxodit"; 
 clear(&head);
return 0;
 
 
}
Вот переделал но всеравно не работает появляется табличка
Миниатюры
Очистка памяти  
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.11.2010, 04:11     Очистка памяти #4
//Александр, Сейчас посмотрю весь код, попробую найти трабл.

Добавлено через 30 минут
Вчера же писал Вам как это лечится...

Не по теме:

Почему мне так хочется начать убивать?



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
#include <iostream>
#include <cstdlib>
#include <fstream>
#include<clocale>
using namespace std;
 
 
struct LIST {
int info;
LIST *next;
};
 
int proverka(LIST *head,int h, int x0,int s)
{ int c=0;
  int tmp=x0;
  LIST *p = head;
 
for(int i=0;i<s;i++)
    {
          if(p->info != tmp)
            {c=0;
         return c;
        }
      else
       {
           c++;
           p=p->next;
           tmp=tmp+h;
           }
    }
        return c;
}
 
int add(fstream &fin,LIST *p)
{int prov=0;
        while( !fin.eof() )
    {
            fin >> p->info;
            p->next =new LIST;
            if(!fin.eof())
                p=p->next;
            prov++;
    }
    p->next=0;
  return prov;
}
 
void clear(LIST** head)
{
        while(*head)
        {
                LIST* p=*head;
                *head=(*head)->next;
                delete p;
        }
}
 
int main()
{ setlocale(LC_ALL, "rus");
        int h,s;
        int x0;
    fstream fin;
    LIST *head=0;
    head=new LIST;
    LIST* p = head;
    p->next=0;
fin.open("fin.txt",ios_base::in);
    if(fin.is_open()==false)
        cout << "ошибка открытия fin.txt!!!";
        
        cout << "Введите начальное значение:" << endl;
     cin >> x0;
    cout << "Введите шаг:" << endl;
     cin >> h;
s=add(fin,p);
        
  if (s == proverka(head,h,x0,s))
        cout << "podxodit";
  else 
        cout << "ne podxodit"; 
 clear(&head);
return 0;
}
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
05.11.2010, 04:15  [ТС]     Очистка памяти #5
ForEveR, Огромное спасибо !!!
Yandex
Объявления
05.11.2010, 04:15     Очистка памяти
Ответ Создать тему
Опции темы

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