malloc()
{
malloc(...);
}
main()
{
init();
while(1){
...
}
}
Где здесь освобождать динамически занятую память?
Или же в таком случае malloc() вообще нельзя использовать?
{
malloc(...);
}
term()
{
free(...);
}
main()
{
init();
while(1){
...
}
term();
}
{
malloc(...);
}
main()
{
init();
while(1){
...
}
}
Где здесь освобождать динамически занятую память?
Или же в таком случае malloc() вообще нельзя использовать?
чё за бред???
int *p = (int*)malloc(RAZMER*sizeof(int));
...
free(p);
{
malloc(...);
}
main()
{
init();
while(1){
...
}
}
Где здесь освобождать динамически занятую память?
Или же в таком случае malloc() вообще нельзя использовать?
Освобождать память в теле той функции, в которой она была выделена, в проьивном случае выделенная память так и останется занятой...
Освобождать память в теле той функции, в которой она была выделена, в проьивном случае выделенная память так и останется занятой...
да ну! если указатель глобальный (см. мой пример), тохоть в другом файле.
А если квалификатор volatile, то хоть из другой программы хоть из локалки
хе-хе-хехехехехе!
А если квалификатор volatile, то хоть из другой программы хоть из локалки
Не а... не прав ты. Освобождать можно только из этогоже модуля, т.к. у каждого модуля в общем случае свой менеджер памяти.
Квалификатор тут вообще не при чем.
Что ты подразумеваешь под "локалкой"?
{
malloc(...);
}
term()
{
free(...);
}
main()
{
init();
while(1){
...
}
term();
}
Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?
Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?
так и надо
Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?
Ну да
{
init();
while(1){
...
if(SIGINT или SIGTERM) break;
...
}
term();
}
{
init();
while(!(SIGINT или SIGTERM)){
...
}
term();
}
Лучше так
{
init();
while(!(SIGINT или SIGTERM)){
...
}
term();
}
Ну это смотря какие условия и в каком порядке.
В данном случае он эти SIGINT и SIGTERM где-то внутри цикла только и получит.
Так в том то и штука, что до term программа никогда не дойдет, т.к. while(1) ( в цикле, грубо говоря, идет прослушивание порта )
Вообще говоря, выполнение завершается только при получении SIGINT или SIGTERM. При этом до term() выполнение не дойдет.
Что же тогда получается - необходимо ловить эти сигналы внутри цикла и, поймав, вызывать term()?
Можно создать еще один поток для этой цели, но это будет довольно гемморойно по-сравнению с проверкой в цикле.