Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

malloc()

2.6K
30 августа 2005 года
NinthBit
43 / / 31.01.2005
Код:
init()
{
    malloc(...);
}
main()
{
    init();
    while(1){
    ...
    }
}

Где здесь освобождать динамически занятую память?
Или же в таком случае malloc() вообще нельзя использовать?
3
30 августа 2005 года
Green
4.8K / / 20.01.2000
Код:
init()
{
    malloc(...);
}

term()
{
    free(...);
}

main()
{
    init();
    while(1){
    ...
    }
      term();
}
7.6K
30 августа 2005 года
Helicopterr
50 / / 21.08.2005
Цитата:
Originally posted by NinthBit
Код:
init()
{
    malloc(...);
}
main()
{
    init();
    while(1){
    ...
    }
}

Где здесь освобождать динамически занятую память?
Или же в таком случае malloc() вообще нельзя использовать?


чё за бред???
int *p = (int*)malloc(RAZMER*sizeof(int));
...
free(p);

13K
30 августа 2005 года
DoctorBrown
1 / / 28.08.2005
Цитата:
Originally posted by NinthBit
Код:
init()
{
    malloc(...);
}
main()
{
    init();
    while(1){
    ...
    }
}

Где здесь освобождать динамически занятую память?
Или же в таком случае malloc() вообще нельзя использовать?



Освобождать память в теле той функции, в которой она была выделена, в проьивном случае выделенная память так и останется занятой...

7.6K
30 августа 2005 года
Helicopterr
50 / / 21.08.2005
Цитата:
Originally posted by DoctorBrown
Освобождать память в теле той функции, в которой она была выделена, в проьивном случае выделенная память так и останется занятой...



да ну! если указатель глобальный (см. мой пример), тохоть в другом файле.
А если квалификатор volatile, то хоть из другой программы хоть из локалки
хе-хе-хехехехехе!

3
31 августа 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Helicopterr

А если квалификатор volatile, то хоть из другой программы хоть из локалки


Не а... не прав ты. Освобождать можно только из этогоже модуля, т.к. у каждого модуля в общем случае свой менеджер памяти.
Квалификатор тут вообще не при чем.
Что ты подразумеваешь под "локалкой"?

2.6K
31 августа 2005 года
NinthBit
43 / / 31.01.2005
Цитата:
Originally posted by Green
Код:
init()
{
    malloc(...);
}

term()
{
    free(...);
}

main()
{
    init();
    while(1){
    ...
    }
      term();
}


Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?

406
31 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by NinthBit
Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?


так и надо

3
31 августа 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by NinthBit
Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?


Ну да

 
Код:
main()
{
  init();
  while(1){
    ...
    if(SIGINT или SIGTERM) break;
    ...
  }
  term();
}
299
31 августа 2005 года
3D Bob
885 / / 18.04.2005
Лучше так
 
Код:
main()
{
  init();
  while(!(SIGINT или SIGTERM)){
    ...
   
   }
  term();
}
3
31 августа 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by 3D Bob
Лучше так
 
Код:
main()
{
  init();
  while(!(SIGINT или SIGTERM)){
    ...
   
   }
  term();
}


Ну это смотря какие условия и в каком порядке.
В данном случае он эти SIGINT и SIGTERM где-то внутри цикла только и получит.

255
01 сентября 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by NinthBit
Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?


Можно создать еще один поток для этой цели, но это будет довольно гемморойно по-сравнению с проверкой в цикле.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог