Форум программистов, компьютерный форум, киберфорум
Наши страницы

уплотнение памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Прочитать неограниченное количество строк, а после нажатия Enter выйти из цикла http://www.cyberforum.ru/cpp-beginners/thread721113.html
Здравствуйте. Столкнулся с такой проблемой: необходимо прочитать неограниченное количество строк, а после нажатия Enter выйти из цикла. Делаю так: #include <iostream> #include <string> using...
C++ Замена чисел в строке условие: в строке заменить все числа на введенное с клавиатуры выдает ошибку: Unsigned(c+1)<=256. вот код: #include<iostream> using namespace std; void main() { setlocale(LC_ALL,"rus");... http://www.cyberforum.ru/cpp-beginners/thread721111.html
C++ не запускается программа, выводящая содержимое файла
Эта программа по идее должна выводить на экран содержимое произвольно заданного файла, но не запускается дальше того, как вводится название файла( В чем ошибка? #include "iostream.h" #include...
C++ Найти площадь пятиугольника
Даны вещественные числа а, b, с, d, e. Найти площадь пятиугольника, изображенного на рис.2. (Определить функцию для расчета площади треугольника по трем его сторонам.) только чтобы на с++. или на...
C++ Нужно поправить программу (тема - функции) http://www.cyberforum.ru/cpp-beginners/thread721084.html
Дан интервал натуральных чисел . Напечатать на экране все те числа, которые принадлежат этому интервалу и которые можно выразить как сумму квадратов двух натуральных чисел (используя функцию, которая...
C++ Считать последний символ файла. Записать символ в конец файла Есть файл. Нужно сначала дописать в его конец один символ, а затем его считать. Как это сделать? Подскажите! подробнее

Показать сообщение отдельно
smolinsky

уплотнение памяти - C++

06.12.2012, 03:00. Просмотров 535. Ответов 0
Метки (Все метки)

помогите исправить ошибку в коде.
условие:
Реализовать заданную стратегию управления памятью. Реализовать базовые операции управления оперативной памятью.
- Выделение блока памяти заданного размера;
- высвобождение выбранного блока;
- уплотнение памяти.

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//#include "stdafx.h"
#include <stdio.h>
#include<string.h>
#include<conio.h>
#include<iostream>
 
using namespace std;
typedef struct mem
    {
        int size;
        bool free;
        struct mem *next;
        struct mem *prev;
    }list;
 
list *begin,*trav,*start;
 
void sort()
{
    int n=1;
list *p,*t;
if(begin->next!=NULL)
{while(n)
{
    n=0;
    p=begin; t=begin->next;
    while (t!=NULL)
    {if (t==begin->next)
    {if (p->free && t->free && p->size<t->size )
    {p->next=t->next;
    t->next=p;
    begin=t;
    p=begin;
    t=t->next;}
    else
    {if(p->next->size>t->size && p->next->free && t->free)
    {p->next->next=t->next;
    t->next=p->next;
    p->next=t;
    t=t->next;
    n++;}
    p=p->next;
    t=t->next;}
    }   }}  }}
void dobav()
{ 
                
        int t,max;
        max=1;
        cout<<"Vvedit rozmir bloku:  ";
        cin>>t;
        list *m=begin;
        //int tmp;
            
        if (begin==NULL)
        { begin=(list*)malloc(sizeof(list));
            
            begin->free=true;
            begin->size=400;
            cout<<endl;
            begin->next=NULL;
            begin->prev=NULL;
            begin->next=(list*)malloc(sizeof(list));
            begin->next->free=false;
            begin->next->size=-t;
            begin->next->next=NULL;
        } else
        {  sort();
                list *a=begin;
                    
            while(a->next!=NULL)
            
                a=a->next;
                a->next=(list*)malloc(sizeof(list));
                a->next->next=(list*)malloc(sizeof(list));
                a->next->free=false;
                a->next->size=t;
                begin->size=(begin->size)-(a->next->size);
                                
                a->next->next=NULL;
                a->next->prev=a->next;
                a->next->next=NULL;
        }
}
 
void print()
{
    p=list.begin();
    while(p!=list.end())
    {
        t=p;
        if (t!=list.begin()) t--;
        if (t->id==0 && p->id==0 && t!=p) 
        {
            t->size+=p->size;
            list.erase(p);
            p=t;
        }
        p++;
    }
 
void delet()
{
    int i=0,n;
    if(begin==NULL) cout<<"Nema elementa"; else
    { do 
    cout<<"Vvedit blok jaky vydalyty: ",
    cin>>n;
    while (n<=0);
    list *t=begin,*s=begin;
    while ( (t!=NULL)&&(++i<n) ) t=t->next;
    if ((t==NULL)||(t->free)) cout<<"Element vidsutnij"; else
    t->free=true;
    cout<<"Element vydaleno";
    };  }
void free_list()
{
    list *t,*a=begin;
    while(a!=NULL) t=a;a=a->next,free(t);
    begin=NULL;
}
        
 
int vybor()
{
    int n;
    cout<<"\n\tMENU\n";
    cout<<"[1]---Vydilenja bloku "<<endl;;
    cout<<"[2]---Vyvil'nenja bloku  "<<endl;
    cout<<"[3]---Vyvedenja karty pamjati  "<<endl;
    cout<<"[0]---EXIT"<<endl;
    cin>>n;
    if(n==1) dobav(); else
        if(n==2) delet() ;else
            if(n==3) print() ;else 
                n=0;
    return n;
}
 
void main()
{ 
        int n;
    do n=vybor();
    while (n!=0);
    free_list();
 
}
у меня не получается уплотнения памяти ето функция описана void print(), тут алгоритм написаный, но переделать неполучается, кно может помочь?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru