2014-04-30 2 views
1

Я плохо разбираюсь в английском, но надеюсь, вы понимаете, что я говорю :) Я пытаюсь улучшить свое мастерство.Объект не был удален до закрытия программы

Хорошо, у меня был какой-то код, как показано ниже:

int main() 
{ 
    int x; 
    int* p = new int(); 

    cin >> x; // waitting for user enter a integer number 
    // BUT, what if the user force closes the program? 

    cout << "The instructions from this to the end are not going to be run!" << endl; 
    delete p; 
    //.. 

    return 0; 
} 

Память, которая была выделена на р указатель никогда не будет удален.

У нас есть решение этой проблемы?

СПАСИБО :)

Обновлено: ли утечка памяти?

+1

Можете ли вы определить, что означает «сила закрытия»? – Angew

+0

ОС очистит его для вас. Это оптимизация для * не * очистки вашей памяти, когда процесс закрывается, потому что он все равно будет освобожден. http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx –

+0

«никогда не будет удалено», это неверно, операционная система очистит оставшиеся ресурсы. –

ответ

2

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

Не беспокойтесь об этом. Вы должны беспокоиться о памяти, когда ваша программа запущена.

Когда ваш код запущен. Избегайте использования голых указателей, попробуйте использовать интеллектуальные указатели, если вам нужны указатели.

+0

Я подумаю об этом :) Спасибо. – dnvThai

+0

Так ... Это утечка памяти? – dnvThai

+0

Да, но когда ваш код сразу же закрывается, после этого ОС очистит всю память вашего процесса. – deepmax

1

Операционная система позаботится об этом. Он освободит всю память (а также другие ресурсы, такие как сокеты), которые были выделены программой после завершения программы.

1

A SIGKILL, или эквивалент Windows, закроет программу без очистки. ОС вернет память и ресурсы, такие как дескрипторы файлов/дескрипторы файлов. Вы можете сделать это очень мало; Сигналы «жесткого убийства» существуют в качестве последнего средства для программ, которые не прекращаются добровольно.

Некоторые другие сигналы «мягкого уничтожения» могут быть caught и обрабатываться соответствующим образом.

1

Если вы берете Windows, например, закрытие окна консоли приведет к закрытию приложения.

Все память и дескрипторы ОС, которые ваша программа выделила, будут освобождены самой ОС, поэтому вам не о чем беспокоиться. Нельзя «защищать» все возможные принудительные окончания приложений.

Вы должны сделать программу, которая при нормальных условиях не содержит никаких воспоминаний, а при использовании исключений не возникает утечки при вызове исключения.

Смежные вопросы