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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
#1

Работа с динамической памятью! - C++

06.06.2009, 13:06. Просмотров 2586. Ответов 27
Метки нет (Все метки)

Привет! Такая задача: Необходимо выделить(по N Кб) и освободить всю динамическую память. Определить время выделения и освобождения, и объем памяти. Использовать функции: 1) malloc, free. 2) heapAlloc, heapFree.
Вообще я разбираюсь в программировании, но на С/С++ никогда ничего не писал. Помогите кто в курсе дел.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2009, 13:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с динамической памятью! (C++):

Работа с динамической памятью - C++
Привет всем. Я недавно начал изучать C++ и наткнулся на ошибку:"двумерный динам.exe вызвал срабатывание точки останова" при очистке...

Работа с динамической памятью в цикле - C++
Всем привет. Есть переменная data, созданная динамически На каждой итерации цикла в нее записывается информация char* data =...

Работа с динамической памятью через указатели. - C++
Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

строки: работа с динамической памятью, перегруженные конструкторы - C++
Привет! Есть задача: Разработать класс String, который в дальнейшем будет использоваться для работы со строками. Класс должен...

Работа с динамической памятью через указатели. Загадочная ошибка. - C++
Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

Работа с динамической памятью через указатели. Загадочная ошибка. - C++
Программа запускается и нормально исполняется, но в конце появляется ошибка. Мог бы кто подсказать в чем проблема? Пишу в Microsoft...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
08.06.2009, 13:00 #16
Пожалуйста Как можна подсчитать время работы алгоритма (части программы).
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 13:10  [ТС] #17
Ооо! да, круто, спасибо)
Search..
08.06.2009, 13:11
  #18

Не по теме:

Ооо! да, пупсик ! ыы

fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 14:29  [ТС] #19
Товарищи, еще одна проблема.
Хочу создать динамический список, для выделяемых ячеек памяти(чтоб их можно было потом последовательно удалить). Но уже возникли ошибки в структуре:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdlib.h>
 
struct Node{
    int  count;
    Node *next;
};
typedef Node *PNode;
 
PNode Head;
 
int main(){
 
    return 0;
}
Ошибки следующие:
task2.c:5: error: expected specifier-qualifier-list before ‘Node’
task2.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
task2.c:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Head’

в чем может быть проблема?
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,137
Записей в блоге: 26
08.06.2009, 14:31 #20
Для Си надо строку 5 менять на "struct Node *next;". Поскольку тип с точки зрения Си называется "struct Node", а не "Node". Для Си++ слово struct можно опустить

Добавлено через 47 секунд
7-ю строку, соотвественно, "typedef struct Node *PNode;"

Хотя можно и "typedef Node* Node;"
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 14:38  [ТС] #21
ха, точно)
только теперь возникает ошибка:
task2.c:9: error: storage size of ‘Head’ isn’t known

т.е. надо как-то изначально задать размер храниища? приравнять к NULL не получается.
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,137
Записей в блоге: 26
08.06.2009, 14:43 #22
Весь исходник покажи
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 14:48  [ТС] #23
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdlib.h>
 
struct Node{
    int  count;
    struct Node *next;
};
typedef struct Node *PNode;
 
struct PNode Head;
 
/*  Pnode CreateNode(char NewWord[]){
   PNode NewNode = new Node;
   strcpy(NewNode->word, NewWord);
   NewNode->count = 1;
   NewNode->next = NULL;
   return NewNode;
}
*/
 
int main(){
 
    return 0;
}
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,137
Записей в блоге: 26
08.06.2009, 15:10 #24
У тебя нет типа "struct PNode". Есть просто "PNode"
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 15:23  [ТС] #25
блин, может мне вообще эти динамические списки не нужны и есть какой-нить более простой способ? Как уже говорилось - надо выделить всю динамическую память блоками по (к примеру) 80 Кб. После чего освободить и вывести статистику.

Есть какой-нить способ хранить ВСЕ указатели на выделенные блоки, чтоб их потом можно было удалить? проблема в том, что неизвестно сколько этих блоков получится.
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,137
Записей в блоге: 26
08.06.2009, 16:05 #26
Цитата Сообщение от fba Посмотреть сообщение
Есть какой-нить способ хранить ВСЕ указатели на выделенные блоки, чтоб их потом можно было удалить? проблема в том, что неизвестно сколько этих блоков получится.
Можешь хранить в каком-нибудь динамическом массиве, который так же будешь выделать кусками. осле ого, как весь кусок заполнился, перевыделяешь его (через realloc), либо ведёшь страничную структуру из кусков

Хотя наиболее простым вариантом для твоего случая будет выделять куски, а в начало каждого куска помещать указатель на слудующий. Т.е. вести список, где сами куски являются элементами списка

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Block
{
  struct Block *next;
};
 
...
// Выделение нового куска размером в size байт
struct Block *elem;
 
// Со слишком маленькими кусками работать не будем
if (size < sizeof (struct Block))
  abort ();
 
// Нам до фонаря тот факт, что выделяемый блок имеет размер бОльший, чем наша структура.
// Главное, что мы его выделили и что в начале блока лежит наша структура,
// по которой мы найдём все блоки
elem = malloc (size);
prev_elem->next = elem;
elem->next = NULL;
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 17:11  [ТС] #27
Yeah! Вроде сделал, что требовалось!
А терь есть еще небольшая задачка: Как то, что получилось переделать под heapAlloc и heapFree? Это вообще Си'шные команды?
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,137
Записей в блоге: 26
08.06.2009, 17:24 #28
Что такое heapAlloc и heapFree - смотри тут http://msdn.microsoft.com/en-us/libr...97(VS.85).aspx

Судя по всему это то же самое, но более навороченное. Т.е. сначала ты выделяешь некий дескриптор пул памяти, а потом в этом пуле выделаешь память. Описание не читал, но скорее всего ради того, чтобы потом можно было целиком удалять пул и не заморачиваться с удалением результата каждого malloc'а - все более-менее приличные программы внутре себя содержат подобные менеджеры памяти, а тут они решили это вытащить в ситему

Работать точно так же. Выделяешь один heap, затем в нём делаешь кучу heapMalloc'ов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2009, 17:24
Привет! Вот еще темы с ответами:

Работа с динамической памятью. Ошибка в функции getline через посимвольный ввод - C++
Было дано вот такое задание: В этой задаче вам необходимо написать функцию getline, которая читает строку из стандартного потока ввода...

Разобраться в принципе работы задачч. (Работа с динамической памятью через указатели. ) - C++
Вот условие задачи: Создать массив из N целых чисел, N вводит пользователь. Заполнить массив случайным образом в диапазоне от 1 до 12....

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? - C++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

программа с динамической памятью - C++
текст программы #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iomanip&gt; #define m 12 using namespace...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.06.2009, 17:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru