170 похожих чатов

Не подскажите что произойдёт если написать new int; и нигде

не сохранять указатель? Утечка памяти?

43 ответов

6 просмотров

Утечка

А что значит "утечка"? Типа память будет считаться выделенной, и поэтому будет "висеть пустой"?

Oppo
А что значит "утечка"? Типа память будет считаться...

Выделится блок памяти, но освобождён не будет

Georgy Firsov
Выделится блок памяти, но освобождён не будет

Но и использоваться не будет. И будет пустым всё время, пока прога работает и "перевыделен" тоже не будет, так?

Oppo
Но и использоваться не будет. И будет пустым всё в...

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

Georgy Firsov
Ну в нем то всё равно что-то лежать будет Ни один ...

Я про то, что там не будет никаких данных пользователя, будет лежать "мусор"

Oppo
А что значит "утечка"? Типа память будет считаться...

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

Oppo
Ага. А в УК статья какая? 404 или иная?

Да вот, напрямую статья есть http://www.consultant.ru/document/cons_doc_LAW_10699/a4d58c1af8677d94b4fc8987c71b131f10476a76/

Ilya Zviagin
Да вот, напрямую статья есть http://www.consultant...

Очень тонко. Я так тонко не понимаю. В чём опасность выделения памяти и её неиспользования?

Oppo
Очень тонко. Я так тонко не понимаю. В чём опаснос...

ты серьёзно спрашиваешь или по приколу?

Ilya Zviagin
ты серьёзно спрашиваешь или по приколу?

Серьёзно. Я не шарю настолько. Для меня сейчас такая утечка памяти - оплошность и не более.

Oppo
Серьёзно. Я не шарю настолько. Для меня сейчас так...

Это так и есть. Но представь, что у тебя не учебная программа, а программа (скажем) управления движением самолёта, и в ней таких оплошностей не одна, а в каждой функции, которых, скажем, 5000. Далее, эта утечка в 4-8 байт (больше на самом деле), конечно, маленькая, и незаметная. Но представь, что у тебя в твоей этой большой программе с 5000ми маленьких утечек есть одна утечка памяти посерьёзнее, размером, скажем, в мегабайт. Теперь всю ситуацию представь целиком. У тебя огромный программный комплекс, в нём 5001 утечка памяти, и одна из них - очень большая и критическая. РАЗБИРАЙСЯ!

Ilya Zviagin
Это так и есть. Но представь, что у тебя не учебн...

Вот поэтому и не бывает несерьёзных утечек памяти

Ilya Zviagin
Это так и есть. Но представь, что у тебя не учебн...

Честно говоря, всё равно не очень понимаю. В какой момент это становится проблемой? При очередном, например, динамическом выделении памяти из кучи? То есть, когда в куче нет необходимого объёма памяти для текущего динамического выделения из-за таких утечек?

Oppo
Честно говоря, всё равно не очень понимаю. В какой...

Ты понимаешь, как ищутся в программах утечки памяти ?

Oppo
Честно говоря, всё равно не очень понимаю. В какой...

@pref_prof, на бортовом компьютере самолёта закончится память, придёт страшный OOM Killer и убьёт систему управления полётом как слишком обнаглевшую. А если не придёт — программа сама перепишет часть своих внутренних управляющих структур из-за переполнения и контроль над самолётом будет потерян. В обоих случаях вам вполне реально грозит УК РФ

Ofee Oficsu
@pref_prof, на бортовом компьютере самолёта законч...

Ну чести ради, вроде на таких штуках запрещены же динамические аллокации?

Oppo
Нет

Создаётся большой список всех динамических объектов программы, куда помещается каждый создаваемый динамически объект (по факту каждый выделенный блок памяти) При уничтожении объекта он, наоборот, удаляется из этого списка. По окончании программы мы можем распечатать этот список, если он не пустой, и подумать, где каждый блок был выделен (обычно эта информация сохраняется при создании объекта) и где он должен был быть освобождён, но не был освобождён.

Тимата 🏳️‍🌈 Тэнкю
Ну чести ради, вроде на таких штуках запрещены же ...

Необходимости контроля и понимания это не отменяет. Если и запрещены — наверное, это одна из важных причин запрета

Тимата 🏳️‍🌈 Тэнкю
Ну чести ради, вроде на таких штуках запрещены же ...

Это совершенно другой вопрос. Иногда и не запрещены.

Ofee Oficsu
@pref_prof, на бортовом компьютере самолёта законч...

Ок. А как программа может сама себя "перезаписать"? Я понимаю, что такое может произойти, если криво на Asm-е писать (не под ОС); в C, думал, это отслеживается компилятором. Или, по крайней мере, системой, если она есть.

Oppo
Честно говоря, всё равно не очень понимаю. В какой...

У человечества вообще не так уж много инструментов для борьбы с утечками и инспекции динамической памяти. Поэтому вместо того, чтобы искать в лесу допустимых утечек недопустимые, проще не допускать их вообще.

Oppo
Ок. А как программа может сама себя "перезаписать"...

В большинстве современных ОС это невозможно. А вот в DOS - запросто.

Oppo
Ок. А как программа может сама себя "перезаписать"...

Если система есть — придёт кто-то и убьёт программу. Просто потому что ей дальше некуда писать свои данные. Если системы нет — программа всевластна. Ну вот что будет, если записать память по адресу большему, чем у нас всего памяти? Никто не знает и не отвечает на этот вопрос — программа может начать писать в начало доступного диапазона памяти, а может записать "вникуда" так, что эти данные (критические в нашем случае!) потом никто не сможет прочесть, может вылететь сама матрица с ошибкой

Denis P
Что значит перезаписать себя?

"программа сама перепишут часть своих внутренних управляющих структур". Я это понял так: программа, записывая и неконтролируемо сжирая память, может "затереть" себя в ОЗУ.

Oppo
"программа сама перепишут часть своих внутренних у...

Бред какой то, к с++ не имеющий тем более отношения

Denis P
Бред какой то, к с++ не имеющий тем более отношени...

Тогда как понимать "программа сама перепишут часть своих внутренних управляющих структур"?

Oppo
"программа сама перепишут часть своих внутренних у...

Как правило затирается не код, а стек.

netricks
Как правило затирается не код, а стек.

Ну и если в стеке был записан адрес выхода из функции, то всё накроется медным тазом. Я это и представлял, когда писал. Неправильно выразился. Прошу простить

netricks
Как правило затирается не код, а стек.

А вот мне тоже стало интересно Каким же это образом? Рано или поздно аллокатор начнет bad_alloc бросать Собственно, современные ОС вряд ли хипу на стек пустят

Georgy Firsov
А вот мне тоже стало интересно Каким же это образо...

Эти проблемы больше относятся к разработкам под микроконтроллеры. Памяти меньше чем на мэйнах, а средства защиты практически отсутствуют. При программировании под большие машины, действительно, скорее всего отработает один из многочисленных защитных механизмов.

netricks
Как правило затирается не код, а стек.

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

Yalokin Kononov
код секция мапится в страничку которую нельзя меня...

Это если у вас на системе есть юзерспейс и средства менеджмента памяти....

Yalokin Kononov
код секция мапится в страничку которую нельзя меня...

как хорошо, что есть апи, которые позволяют +W сделать

Denis P
как хорошо, что есть апи, которые позволяют +W сде...

ну это как выстрел по ноге самому себе

Yalokin Kononov
ну это как выстрел по ноге самому себе

Программирование - штука многообразная. То, что не все системы запускают код в песочнице стоит понимать. Во избежание внезапных открытий.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта