0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 12
|
|||||||||||
1 | |||||||||||
Почему у массивов типа char может быть утечка памяти, а у указателей char с выделенной памятью - нет?18.05.2019, 19:01. Показов 2273. Ответов 9
Метки нет Все метки)
(
Тут будет утечка памяти:
0
|
|
18.05.2019, 19:01 | |
Ответы с готовыми решениями:
9
В чем отличие двумерного массива типа char от массива указателей на char? Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? |
84 / 103 / 14
Регистрация: 26.01.2014
Сообщений: 669
|
|
18.05.2019, 19:27 | 3 |
Во втором фрагменте Вы не освобождаете память, которую резервируете через ...new ... В остальном не вижу разницы. В чем будет выражаться утечка памяти?
Ваш - Etien
0
|
5772 / 3196 / 1323
Регистрация: 07.02.2019
Сообщений: 8,063
|
|
18.05.2019, 19:32 | 4 |
Roman_Remeslo, вы в первом и во втором случае залезаете в чужую память, используйте
istream::getline , istream::get или istream::read для безопасного чтения
0
|
Неэпический
|
|
18.05.2019, 19:37 | 5 |
Roman_Remeslo, после того, как ты ввел текст и нажал enter, первая программа у тебя рухнула, поэтому ты решил, что в ней утечка памяти? А вторая не рухнула, поэтому в ней нет утечки памяти?
1
|
0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 12
|
|
18.05.2019, 19:45 [ТС] | 6 |
Да, Croessmah.
0
|
Неэпический
|
|
18.05.2019, 20:37 | 7 |
![]() Решение
Roman_Remeslo, ты просто в первом коде вылез за пределы массива и переписал адрес возврата, который был расположен в стеке, поэтому код и упал.
Утечка как раз во втором коде - выделение памяти с помощью new[] есть, а освобождения с помощью delete[] нет. А вот то что код не упал - это просто не повезло, ты тоже там пишешь за пределы выделенной памяти.
1
|
0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 12
|
|
19.05.2019, 01:20 [ТС] | 8 |
Когда скомпилировал в VS2010, то в первом вылезла ошибка, вот я и подумал, что это утечка памяти. Спасибо за пояснение, Croessmah.
0
|
84 / 103 / 14
Регистрация: 26.01.2014
Сообщений: 669
|
|
19.05.2019, 20:47 | 9 |
Транслятор крайне редко диагностирует ошибку наподобие Утечка памяти. Это ошибка выполнения. Она может быть, но в процессе работы вы просто не доходите до состояния, когда она проявляется. У самого бывали ошибки в программах, которые до того годами успешно работали. Очень поучительно разбираться.
Ваш - Etien
1
|
Комп_Оратор)
![]() |
|
19.05.2019, 21:14 | 10 |
Roman_Remeslo, имя из одной буквы, это даже для собачки маловато. Напишите хотя бы:
Остап Сулейман Ибрагим Берта Мария Бендер-бей уже полностью поместится. Тогда останется утечка во втором случае где вы не освободили память и не передали указатель наружу, чтобы кто ни будь это сделал снаружи. То есть, память занята, а ключ от волшебной дверцы утерян. Тортилла не поможет теперь.
1
|
19.05.2019, 21:14 | |
Помогаю со студенческими работами здесь
10
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |