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

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

Войти
Регистрация
Восстановить пароль
 
Nfyaka
1 / 1 / 1
Регистрация: 04.05.2010
Сообщений: 28
#1

Вопросы по динамической памяти. - C++

29.05.2010, 14:37. Просмотров 543. Ответов 6
Метки нет (Все метки)

У меня вопросы по работе с динамической памятью. Пожалуйста, помогите разобраться с этой темой.
- чем отличается free() от delete[]? и каким из них я должна пользоваться при очищении памяти из-под одномерного динамического массива структур?
- если в функции я использую динамические массивы, то их нужно обязательно очищать в конце этой функции? Кроме массива, указатель на который возвращается функцией?
- после очищения памяти из-под динамического массива указатель можно использовать дальше?
- если в классе есть указатель на объект, например,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A
{   char*name;
     A(int a,int b){...}
     ...
};
class B
{  A*ob;
    B(int a) 
   {  if(a==0)
         ob=new A(14,29);
       else
         ob=new A(92,489);
    }
};
нужно ли тут очищать память?..

Я была бы очень благодарна за ссылку на материал по конкретной работе с именно динамической памятью. Я знаю, гугл наш друг, но если у вас есть ссылка на хороший материал, это было бы замечательно. Огромное спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2010, 14:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопросы по динамической памяти. (C++):

Выделение динамической памяти - C++
Всем привет. Возникла задача, в которой мне необходимо знать как выделяется динамическая память средсвами new/delete. А именно,...

Выделение динамической памяти - C++
Доброго времени суток! я начинающий программист, столкнулась с такой проблемой: выделяю память под динамический массив, например ...

Теория по динамической памяти - C++
Предположим, применяется оператор new в форме для массива: p=new int ;. n ведь может быть и большим. Может n==1000000? Где запоминается,...

Удаление динамической памяти - C++
В книгах по С++ я читал про утечку памяти. Я решил создать программу, в которой будет выделаться 1 Гб памяти и не удаляться. Будучи...

Удаление динамической памяти - C++
Всем здрасьте. Имеется вот такая структура. struct ModelType { DWORD FVF; IDirect3DVertexBuffer9* vertexBuffer; ...

Выделение динамической памяти - C++
Добрый вечер. Помогите разобраться пожалуйста! Суть такова: есть файл, в нем есть данные, мне надо их оттуда считать и вывести на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
29.05.2010, 15:21 #2
Цитата Сообщение от Nfyaka Посмотреть сообщение
У меня вопросы по работе с динамической памятью. Пожалуйста, помогите разобраться с этой темой.
- чем отличается free() от delete[]? и каким из них я должна пользоваться при очищении памяти из-под одномерного динамического массива структур?
никогда не пользовался фрии так что не знаю
Цитата Сообщение от Nfyaka Посмотреть сообщение
- если в функции я использую динамические массивы, то их нужно обязательно очищать в конце этой функции? Кроме массива, указатель на который возвращается функцией?
если тебе не нужны значения которые там будут - да, если нужны значения, удалять не надо!
Цитата Сообщение от Nfyaka Посмотреть сообщение
- после очищения памяти из-под динамического массива указатель можно использовать дальше?
да
Цитата Сообщение от Nfyaka Посмотреть сообщение
- если в классе есть указатель на объект, например,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A
{   char*name;
     A(int a,int b){...}
     ...
};
class B
{  A*ob;
    B(int a) 
   {  if(a==0)
         ob=new A(14,29);
       else
         ob=new A(92,489);
    }
};
нужно ли тут очищать память?..
в деструкторе надо очищать, когда уничтожается объект, он вызывается сам.
C++
1
2
3
4
5
6
7
8
9
10
11
class B
{  A*ob;
    B(int a) 
   {  if(a==0)
         ob=new A(14,29);
       else
         ob=new A(92,489);
    }
    ~B()
{delete[] A;}
};
1
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
29.05.2010, 15:34 #3
Цитата Сообщение от Nfyaka Посмотреть сообщение
чем отличается free() от delete[]?
C - malloc + free
C++ - new + delete
1
Nfyaka
1 / 1 / 1
Регистрация: 04.05.2010
Сообщений: 28
29.05.2010, 15:56  [ТС] #4
Спасибо большое!)

Добавлено через 13 минут
для использования realloc нужно обязательно, чтобы массив создавался с помощью malloc, не new? это очень важно?
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
29.05.2010, 16:02 #5
Цитата Сообщение от Nfyaka Посмотреть сообщение
для использования realloc нужно обязательно, чтобы массив создавался с помощью malloc, не new? это очень важно?
Да. Где товар купили, там и обмениваем.
1
time2die
51 / 51 / 3
Регистрация: 25.05.2010
Сообщений: 182
29.05.2010, 16:03 #6
Цитата Сообщение от Nfyaka Посмотреть сообщение
для использования realloc нужно обязательно, чтобы массив создавался с помощью malloc, не new? это очень важно?
http://www.cplusplus.com/reference/c...tdlib/realloc/

Parameters
ptr
Pointer to a memory block previously allocated with malloc, calloc or realloc to be reallocated.
If this is NULL, a new block is allocated and a pointer to it is returned by the function.
size
New size for the memory block, in bytes.
If it is 0 and ptr points to an existing block of memory, the memory block pointed by ptr is deallocated and a NULL pointer is returned.
1
Nfyaka
1 / 1 / 1
Регистрация: 04.05.2010
Сообщений: 28
29.05.2010, 16:03  [ТС] #7
Понятно, спасибо большое)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2010, 16:03
Привет! Вот еще темы с ответами:

Переменная в динамической памяти - C++
class SimpleCircle { public: SimpleCircle (); //Basic constructor SimpleCircle (int radius); //Constructor with parameters ...

выделение динамической памяти - C++
помогите пожалуйста , нужно написать функцию для ввода новой матрицы, не получается выделить под него память. класс: mymatrix ::...

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

Вопрос по динамической памяти - C++
мне надо создать масив содержащий структуры. У меня вот код какой: vec *fild;//vec это название структуры конструктор ...


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

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

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