Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выделение памяти в массиве 
:(
    Опции темы
rukudias
Дата 9.1.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 28.2.2007

Репутация: 0
Всего: 0



Привет Всем!
есть код
char *pt;
 if(dlenth)
     {
     char masqq[1024];
     pt=new (masqq) char[20];
     }
 pt[10]='D';

ине подает! smile 
вчем тут дело?
Типа мне обьяснили это для того чтоб память полюбому очистелась
так я кобы после того как переменная masqq умерла в своей обл видимости
и очистив память я через указатель могу к этому участку обратится

PM MAIL   Вверх
Alek86
Дата 9.1.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



не совсем понял, что ты хотел, но
Код

     {
     char masqq[1024];
     pt=new (masqq) char[20];
     }

1024 байта памяти, выделенные под masqq в стеке, освободятся при выходе из блока


--------------------
user posted image    user posted image
PM MAIL   Вверх
rukudias
Дата 9.1.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 28.2.2007

Репутация: 0
Всего: 0



как  я понял в стеке мы выделяем 1024  байта
потом в этих 1024 выделяем 20
я думалчто после того как мы вышли из обл видемости переменной masqq
память выделеная динамически тоже удаляется 
а нет у мя есть указатель на нее я могу писатьв нее читать вот удалить правдо немогу smile 
PM MAIL   Вверх
Daevaorn
Дата 9.1.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(rukudias @  9.1.2008,  16:47 Найти цитируемый пост)
как  я понял в стеке мы выделяем 1024  байта
потом в этих 1024 выделяем 20
я думалчто после того как мы вышли из обл видемости переменной masqq
память выделеная динамически тоже удаляется 

Цитата(rukudias @  9.1.2008,  16:29 Найти цитируемый пост)
pt=new (masqq) char[20];

Это не выделение памяти.
Цитата(rukudias @  9.1.2008,  16:47 Найти цитируемый пост)
а нет у мя есть указатель на нее я могу писатьв нее читать вот удалить правдо немогу smile

указатель может быть на любую область памяти, ты можешь читать/писать пока по рукам не получишь от системы.

Это сообщение отредактировал(а) Daevaorn - 9.1.2008, 15:56
PM MAIL WWW   Вверх
rukudias
Дата 10.1.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 28.2.2007

Репутация: 0
Всего: 0



Привет Всем!
На основании опытов я могу сделать вывод:

Код


char mas[1024];
char *pt=new (mas) char[200];



данная конструкция однозначно удалит память
выделеннную динамически в области статического массива

провел пару опытов 

Код


void funzi()
{
    char mas[1024];
    char *pt=new (mas) char[200];

}
void main()
{

while(1)
    {
                funzi();
                            Sleep(1000);
    }


}



те каждую секунду выделяю память но не удаляю
в диспечере все оке утечки памяти нет

Код


void funzi()
{
        char *pt=new  char[200];

}
void main()
{

while(1)
    {
                funzi();
                            Sleep(1000);
    }


}


 притакой записи все плохо выделяем память но не уничтожаем ее те утечка памяти!
вот впринципе и все ! smile 
PM MAIL   Вверх
Alek86
Дата 10.1.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(rukudias @  10.1.2008,  11:20 Найти цитируемый пост)
На основании опытов я могу сделать вывод:


тебе же сказали:
Цитата(Daevaorn @  9.1.2008,  15:56 Найти цитируемый пост)
Это не выделение памяти.




--------------------
user posted image    user posted image
PM MAIL   Вверх
rukudias
Дата 10.1.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 28.2.2007

Репутация: 0
Всего: 0



Код

 pt=new (masqq) char[20];


а разве оператор new нужен не для выденения памяти? smile 
PM MAIL   Вверх
bsa
Дата 10.1.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



rukudias
Код
pt = new (masqq) char[20];
Это называется "разместить массив в 20 char в области памяти, на которую ссылается masqq".
Код
pt = new char[20];
Это называется "выделить память под массив в 20 char и разместить его там". Кстати, помимо всего прочего new вызывает конструкторы размещаемых объектов.
PM   Вверх
Damarus
Дата 10.1.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(rukudias @  10.1.2008,  11:49 Найти цитируемый пост)
а разве оператор new нужен не для выденения памяти? smile  

placement new

PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.