![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
rp80 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Копирование указателя на объект не приводит к копированию объекта.
Значит следующий код приведет к утечки памяти:
Правильно копировать так:
А что происходит при копировании переменных в стеке?
Теряется ли память выделенная первоначально под s? |
|
|
![]() |
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Правильно копировать так: char* c =new char[30]; char* cc="zca"; delete[] c; c=new char[sizeof(cc)]; for(size_t i=0;i<sizeof(cc);++i) c[i]=cc[i]; лучше уж так
А что происходит при копировании переменных в стеке? const char* s="xzczv"; const char* s1="vvb"; s=s1;//s и s1 указывают на одно и тоже место в памяти здесь массивы заданы статически , они являются константами. Причём на стеке - только указатели, сами данные в странице данных Ничего никуда не утечёт |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 9.6.2025, 7:26 |