Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > выделение памяти в массиве


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

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

Автор: Alek86 9.1.2008, 15:37
не совсем понял, что ты хотел, но
Код

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

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

Автор: rukudias 9.1.2008, 15:47
как  я понял в стеке мы выделяем 1024  байта
потом в этих 1024 выделяем 20
я думалчто после того как мы вышли из обл видемости переменной masqq
память выделеная динамически тоже удаляется 
а нет у мя есть указатель на нее я могу писатьв нее читать вот удалить правдо немогу smile 

Автор: Daevaorn 9.1.2008, 15:56
Цитата(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

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

Автор: rukudias 10.1.2008, 11:20
Привет Всем!
На основании опытов я могу сделать вывод:

Код


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 

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


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


Автор: rukudias 10.1.2008, 11:49
Код

 pt=new (masqq) char[20];


а разве оператор new нужен не для выденения памяти? smile 

Автор: bsa 10.1.2008, 11:57
rukudias
Код
pt = new (masqq) char[20];
Это называется "разместить массив в 20 char в области памяти, на которую ссылается masqq".
Код
pt = new char[20];
Это называется "выделить память под массив в 20 char и разместить его там". Кстати, помимо всего прочего new вызывает конструкторы размещаемых объектов.

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

http://www.google.ru/search?complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla:ru:official&hs=uYY&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=placement+new&spell=1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)