![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
rp80 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Копирование указателя на объект не приводит к копированию объекта.
Значит следующий код приведет к утечки памяти:
Правильно копировать так:
А что происходит при копировании переменных в стеке?
Теряется ли память выделенная первоначально под s? |
|
|
![]() |
ilyabvt |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: ![]() ![]() ![]() |
Правильно копировать так:
Не правильно. sizeof(cc) вернет размер указателя, а не массива. В данном случае это сработает только по тому что вы создали 4-х байтный массив. Цитата а если это оптимизированное хранение констант в сегменте кода, то их в принципе невозможно удалить Теоретически возможно. Только это путь даже не джедая, а какого-то безумного ситха, ибо придется не только найти строки в памяти и удалить, но и подредактировать код (не исходный, а тот что висит в памяти в виде процессорных иструкций) так чтобы прога думала что никакой переменной и не существовало. ![]() Сообщение отредактировал ilyabvt - 22.12.2011, 17:50 |
|
|
Iron Bug |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Теоретически возможно. Только это путь даже не джедая, а какого-то безумного ситха, ибо придется не только найти строки в памяти и удалить, но и подредактировать код (не исходный, а тот что висит в памяти в виде процессорных иструкций) так чтобы прога думала что никакой переменной и не существовало. ![]() нет. сегмент кода не может менять содержимое ни в одной из современных осей. это главное правило: код не может модифицировать сам себя. это только в DOSе можно было писать такие кренделя. любая защищённая система этого не позволяет. модифицировать можно исполняемый файл, например. или в отладчике писать какие-то значения в регистры. или подгружать какие-то библиотеки на ходу. но сама программа себя менять никак не может. просто нет прав на запись в сегмент кода. Хорошо, а где хранятся данные переменных? В самом стеке? И в примере с чтением из файла в какой-то момент будет переполнение стека, если файл достаточно большой? смотря каких. константы могут быть сложены в сегмент кода (раз они не меняются). переменные, которые обычные - в сегменте данных. можно ещё регистровые переменные создавать - они, соответственно, будут размещены в регистрах, если компилятор сможет их так распределить. если не сможет - то всё равно в сегменте данных. Сообщение отредактировал Iron Bug - 22.12.2011, 20:33 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 18:28 |