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

Не выполняется realloc - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Прокомментируйте пожалуйста прогу http://www.cyberforum.ru/cpp-beginners/thread594835.html
#include "iostream" #include <conio.h> #include <math.h> using namespace std; float f2(float x){ return x+3; }
C++ Ввести строку и вывести разницу Нужно ввести строку с 5 символов например: C7-D5. Нужно вывести разницу 7-5=2, если строка введена например: BSN, или то вивести ERROR http://www.cyberforum.ru/cpp-beginners/thread594824.html
Максимальный элемент массива C++
Здравствуйте! Помогите, пожалуйста. Вот задача: Даны два целочисленных массива K(m) и L(n). Найти наибольший элемент массива K, не имеющий себе равных в массиве L. Как найти наибольший элемент...
C++ SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
господа не могу вытащить значение вот из этого - typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { LARGE_INTEGER IdleTime; LARGE_INTEGER KernelTime; LARGE_INTEGER...
C++ Шаблоны функций. Есть ошибки http://www.cyberforum.ru/cpp-beginners/thread594815.html
Помогите исправить ошибки! #include <iostream> #include <math.h> using namespace std; template <class T> T myfind(T* arr, int n) { int i,j,maxelem,minelem;
C++ Программа зависает Делаю игру типа Pacman я управляю им с помощю стрелок и по лабиринту произвольно двигается враг через некоторое время программа зависает... я не могу больше управлять пекменом и вообще ничего не... подробнее

Показать сообщение отдельно
yoloyol
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 15
03.06.2012, 14:52  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
Выложите весь код тогда уже, иначе мы так будем очень долго гадать
хорошо, но не судите строго, за "неграмотность")

Добавлено через 5 минут
"vector.h"
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
using namespace std;
 
class list
{
    public:
        list();
        ~list();
        void sizeVector();  //размер вектора
        void fillNext();    //заполнить поля next
        void menu();    //меню, список действий     //*==
        void completionList(ifstream & fin);  //заполнение списка
        void insertEl();    //вставка элемента
        void deleteEl();    //удаление элемента
        void copyEl();      //буферизация элемента
        void replaceEl();   //замена элемента
        void listEmpty();   //список пуст?
        void contentsList();    //содержимое списка
        void output();      //вывод в файл      //*==
        //void spareMemory(); //резервирование памяти (malloc)
 
    private:
        int size, topLevel;
        char bufferEl;    //переменная хранящая скопированного эл
        struct item
            {
                char element;
                int next;
            };
 
        struct tag
            {
                int head;    //начало списка
                int curr;     //текущий элемент
                int predCurr; //предыдущий элемент
                int headNull;   //начало пустой цепочки
            };
        item * vector;
        tag dataList;
};
"vector.cpp"
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include "vector.h"
 
using namespace std;
 
ifstream fin;
 
list::list()    //конструктор
{
    size=10;
    topLevel=0;
    bufferEl=NULL;
    dataList.head=0;
}
 
list::~list()   //деструктор
{
 
}
 
void openFile (ifstream & fin) //открытие файла (для чтения)
{
    cin.ignore();    //отчитска потока ввода
    char inFile[255];
    cout<<"Открыть файл: "<<endl;
    cin.getline(inFile, 255);
    fin.open(inFile);
    //cout<<"Открытие выполнено"<<endl;
    while (!fin)
        {
            cout<<"\nФайл не найден!\nВведите существующий файл:"<<endl;
            cin.getline(inFile, 255);
            fin.open(inFile);
        }
}
 
void list::menu()
{
    int choice; //вариант из списка
    cout<<"Выберите из списка одну из операций: "<<endl;
    cout<<"1. Заполнить список элементми из файла"<<endl;
    cout<<"2. Вставка элемента в список"<<endl;
    cout<<"3. Удаление элемента из списка"<<endl;
    cout<<"4. Замена элемента в списке"<<endl;
    cout<<"5. Проверка статуса списка"<<endl;
    cout<<"6. Вывод содержимого списка"<<endl;
    cout<<"7. Вывод результата работы в файл"<<endl;
    cout<<"0. Выход из программы\n"<<endl;
    cin>>choice;
    switch(choice)  //рассмотреть вывод операций, когда список пуст + исп беск вариант + вставка с клавы
    {
        case 1: //откр. и заполнение из файла
            openFile(fin);
            //list::spareMemory();
            list::completionList(fin);
            break;
        case 2: //вставка элемента в списка
            list::insertEl();
            break;
        case 3: //удаление элемента из списка
            list::deleteEl();
            break;
        case 4: //замена элемента из списка
            list::replaceEl();
            break;
        case 5: //проверка статуса списка
            list::listEmpty();
            break;
        case 6: //вывод содержимого списка
            list::contentsList();
            break;
        case 7: //вывод результата работы в файл
            //list::output();
            cout<<"Функция еще не создана"<<endl;
            break;
        case 0: //выход из программы
            exit(0);
        default:
            cout<<"Данной команды не существует. Произведется выходи из программы!"<<endl;
            exit(0);
    }
}
 
void list::sizeVector()  //увеличение вектора (+встр индексация)
{
    size=size*3;  //увел размер
    cout<<"перед realloc"<<endl;
    cout<<"vector= "<<vector<<endl;
    cout<<"size_realloc= "<<sizeof(item)*size<<endl;
    cout<<"size= "<<size<<endl;
    vector=(item *) realloc(vector, size*sizeof(item));  //перераспр память
    cout<<"realloc выполнен"<<endl;
    fillNext(); //вызов фун. индексирования
    cout<<"перераспределение выполнено"<<endl;
}
 
void list::fillNext()    //индексация ячеек
{
    for (int i=topLevel; i<size; i++)  //индексирование ячеек
        vector[i].next=i+1;
    vector[size].next=0;    //последняя яч - указывает на нач. вектора
    vector[0].next=topLevel;    //при перераспределении прявязывает цепочку
    topLevel=size+1; //начало (нового) звена
    cout<<"индексирование выполнено"<<endl;
 
}
 
void list::completionList(ifstream & fin)    //заполнение списка
{
    char ch;
    //if(vector[0].element!='1')  //если список был удален а своб места остались
        vector=(item *) malloc(size*sizeof(item));   //резервация памяти
    cout<<"size_malloc= "<<sizeof(item)*size<<endl;
    fillNext();
    dataList.head=vector[0].next;   //создание головы списка
    cout<<"dataList.head= "<<dataList.head<<endl;
    dataList.curr=dataList.head;    //для перехода по списку
    while(fin.get(ch))
        {
            stepBack:   //чтобы не потерять считанный элемент
            cout<<"***переход***"<<endl;
            if (vector[0].next!=0)  //если не указывает на самого себя
                {
                    vector[dataList.curr].element=ch;   //заносим элемент
                    cout<<"vector[dataList.curr].element= "<<vector[dataList.curr].element<<endl;
                    vector[0].next=vector[dataList.curr].next;  //перебиваем ссылку на пустую ячейку
                    vector[dataList.curr].next=dataList.head;   //указываем на начало списка
                    dataList.curr=vector[0].next;   //смещение по списку +1
                }
            else
                {
                    cout<<"переход в else"<<endl;
                    sizeVector();
                    goto stepBack;
                }
        }
 
}
 
void list::insertEl()    //вставка элемента (доделать для неск эл + из буфера) + (вставлять элемент в пустой список запрещено, для начала нужно его заполнить)
{
    char ch;
    int index;
    cout<<"Введите элемент для вставки: ";
    cin>>ch;
    cout<<"Укажите место вставки: ";
    cin>>index;
    dataList.curr=dataList.head;
    dataList.predCurr=dataList.curr;    //на случай вставки пере 1-м эл
    for (int i=2; i<=index; i++)    //т.к. curr обнуляем до head
            {
                dataList.predCurr=dataList.curr;
                dataList.curr=vector[dataList.curr].next;
            }
 
    stepBack_2: //при перераспред памяти
    if (vector[0].next!=0)
        {
            vector[dataList.predCurr].next=vector[0].next;  //добавляем эл в список
            dataList.predCurr=vector[dataList.predCurr].next;   //перемещ на вставл эл
            vector[0].next=vector[dataList.predCurr].next;  //искл из пустого списка
            vector[dataList.predCurr].next=dataList.curr;   //привязываем цепочку
            vector[dataList.predCurr].element=ch;   //вбиваем знач
        }
    else
        {
            sizeVector();
            goto stepBack_2;
        }
}
 
void list::deleteEl()    //удаление элемента
{
    int index;
    cout<<"Укажите индекс удаляемого элемента: ";
    cin>>index;
    dataList.curr=dataList.head;
    if (vector[dataList.head].next==dataList.head)  //т.е. указ на себя (1эл)
        {
            vector[dataList.curr].next=vector[0].next;  //прицепляю к пустой цепочки
            vector[0].next=dataList.curr;   //связали цепочку с пустым списком
            dataList.head=0;    //т.е. список пуст
            vector[0].element='1';  //для случая когда список пуст и есть свободое место
        }
    else    //если неск эл в списке
        {
            for (int i=2; i<=index; i++)    //т.к. curr обнуляем до head
                    {
                        dataList.predCurr=dataList.curr;
                        dataList.curr=vector[dataList.curr].next;
                    }
            vector[dataList.predCurr].next=vector[dataList.curr].next;  //искл из списка
            vector[dataList.curr].next=vector[0].next;  //прицепили к пустой цепочки
            vector[0].next=dataList.curr;   //связали цепочку с пустым списком
        }
}
 
void list::copyEl()  //копирование элемента
{
    int index;
    cout<<"Укажите индекс элемента, который желаете скопировать: ";
    cin>>index;
    dataList.curr=dataList.head;
    for (int i=2; i<=index; i++)    //т.к. curr обнуляем до head
                dataList.curr=vector[dataList.curr].next;   //доходим до эл
    bufferEl=vector[dataList.curr].element; //копируем элемент
}
 
void list::replaceEl()   //замена элемента   (+из буфера попробовать)
{
    int index;
    char ch;
    cout<<"Укажите индекс элемента, который желаете заменить: ";
    cin>>index;
    cout<<"Введите заменяемый элемент: ";
    cin>>ch;
    dataList.curr=dataList.head;
    for (int i=2; i<=index; i++)    //т.к. curr обнуляем до head
                dataList.curr=vector[dataList.curr].next;   //доходим до эл
    vector[dataList.curr].element=ch; //заменяем элемент
}
 
void list::listEmpty()   //список пуст?
{
    if (dataList.head==0)
        cout<<"Список пуст!"<<endl;
    else
        cout<<"Список не пуст!"<<endl;
    //можно попробовать предложить вывод содержимого списка
}
 
void list::contentsList()    //список содержимого
{
    cout<<"Содержимое списка: "<<endl;
    dataList.curr=dataList.head;
    while (dataList.curr!=dataList.head)
        {
            cout<<vector[dataList.curr].element<<endl;  //вывод эл
            dataList.curr=vector[dataList.curr].next;   //доходим до эл
        }
}
"main.cpp"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include "vector.h"
 
using namespace std;
 
int main()
{
    list object;
 
    object.menu();
    return 0;
}
Добавлено через 25 минут
Цитата Сообщение от yoloyol Посмотреть сообщение
vector[0].next=topLevel; * *//при перераспределении прявязывает цепочку
(104 строка) здесь я баловался на самом деле ее нужно исключить, хотя всё равно работать не будет
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru