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

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

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

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

29.05.2010, 14:37. Просмотров 529. Ответов 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);
    }
};
нужно ли тут очищать память?..

Я была бы очень благодарна за ссылку на материал по конкретной работе с именно динамической памятью. Я знаю, гугл наш друг, но если у вас есть ссылка на хороший материал, это было бы замечательно. Огромное спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;}
};
Somebody
2781 / 1595 / 143
Регистрация: 03.12.2007
Сообщений: 4,179
Завершенные тесты: 1
29.05.2010, 15:34     Вопросы по динамической памяти. #3
Цитата Сообщение от Nfyaka Посмотреть сообщение
чем отличается free() от delete[]?
C - malloc + free
C++ - new + delete
Nfyaka
1 / 1 / 1
Регистрация: 04.05.2010
Сообщений: 28
29.05.2010, 15:56  [ТС]     Вопросы по динамической памяти. #4
Спасибо большое!)

Добавлено через 13 минут
для использования realloc нужно обязательно, чтобы массив создавался с помощью malloc, не new? это очень важно?
Somebody
2781 / 1595 / 143
Регистрация: 03.12.2007
Сообщений: 4,179
Завершенные тесты: 1
29.05.2010, 16:02     Вопросы по динамической памяти. #5
Цитата Сообщение от Nfyaka Посмотреть сообщение
для использования realloc нужно обязательно, чтобы массив создавался с помощью malloc, не new? это очень важно?
Да. Где товар купили, там и обмениваем.
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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2010, 16:03     Вопросы по динамической памяти.
Еще ссылки по теме:

Выделение динамической памяти C++ C++
C++ выделение динамической памяти
Теория по динамической памяти C++
C++ Выделение динамической памяти
C++ Освобождение динамической памяти в vs

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

Или воспользуйтесь поиском по форуму:
Nfyaka
1 / 1 / 1
Регистрация: 04.05.2010
Сообщений: 28
29.05.2010, 16:03  [ТС]     Вопросы по динамической памяти. #7
Понятно, спасибо большое)
Yandex
Объявления
29.05.2010, 16:03     Вопросы по динамической памяти.
Ответ Создать тему
Опции темы

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