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

Всем привет,скажите,пожалуйста,если я создал в функции createArray динамический массив (array)

размером size и хочу его удалить в функции deleteArray то в этой функции мне нужно принять ,в качестве переметра, масив array так deleteArray(int &*array,int size),если я его передам так deleteArray(int *array,int size),то удалю его копию и у меня будет утечка памяти.Это правильно или нет?Еесли нет,то скажите,пожалуйста,почему.

15 ответов

5 просмотров

Нет, это неправильно. Можно передавать и так, и так.

Тут есть тонкий момент. В С++ (ну и С в общем тоже) в программе непосредственно не существует объекта "такая-то переменная, созданная динамически" (через new). В программе существуют только ссылки (в любом виде) на этот объект. И передавать в функции ты можешь только ссылки на этот объект (если передашь копию, это будет уже другой объект)

то есть такое то удалю его копию и у меня будет утечка памяти. просто вообще невозможно в программе на С++ (или С)

Gleb-Maksimov Автор вопроса
Gleb Maksimov
но это в случае heap памяти да?

в случае ДИНАМИЧЕСКИХ объектов. никакого хипа не существует.

Gleb Maksimov
но это в случае heap памяти да?

А в случае не-хип-памяти, тебе не надо ничего "удалять!". Так что опять - вопрос глупый.

deleteArray(int &*array,int size) Занулять ли ссылку(и) на удалённый объект ? это большой вопрос... Но язык не требует.

Gleb-Maksimov Автор вопроса
Ilya Zviagin
deleteArray(int &*array,int size) Занулять ли ссы...

вы имете в виду,что по этому адресу даже после удаления числится мусор и если мы по этому адресу обратимся случайно прога может сломаться?

Gleb-Maksimov Автор вопроса
Gleb-Maksimov Автор вопроса
Gleb Maksimov
что

это не так работает?

Gleb-Maksimov Автор вопроса
Ilya Zviagin
ПЕРЕВЕДИ!

так что по этому поводу?

Gleb Maksimov
вы имете в виду,что по этому адресу даже после уда...

Если у тебя есть указатель на динамически созданный объект, который ты удалил, то после удаления в этом указателе будет хранится адрес несуществующего объекта. В этом ничего страшного нет, если ты не будешь обращаться по этому адресу. Иногда такой указатель зануляют (nullptr), чтобы видеть, что ссылка ни на что не ссылается, но это вовсе не обязательно. Иногда алгоритм работы с такими объектами требует зануления, как , например, при обработке списка. Но в целом это не обязательно, язык это не требует, за ошибку это считать нельзя.

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

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

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Карта сайта