Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
vdvoid
3 / 3 / 0
Регистрация: 26.02.2011
Сообщений: 99
#1

удаление указателя - C++

01.04.2013, 12:50. Просмотров 1446. Ответов 31
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
char* func() {
    char *str = new char[100];
    strcpy(str, "I am string!");
    return str;
}
.. далее
char *a;
a = func();
delete[] a;
или 
delete a;
как правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос удаление указателя (C++):

Удаление указателя - C++
Доброго времени суток! Возник вопрос: безопасно ли таким способом удалять указатели? std::vector<MyClass*> vec; //создание ...

Удаление указателя на матрицу - C++
Здравтвуйте есть фу-я удаления матрицы void DeleteMatrix(double **obj) { for (int i = 0; i < n; i++) { delete...

Удаление указателя на объект класса - C++
Что-то ни как не могу разобраться, где у меня ошибка?! Ниже приведен фрагмент кода: //... shapes *ptr=0; //ptr - указатель базового...

Удаление и создание указателя в игре - C++
Добрый вечер. Долгое время сижу с кодом, не придет в голову: Нужно, чтобы при пересечении на тайлмапе координат игрока/64 и символа 'b'...

Удаление указателя, в классе не содержащем объекта - C++
Подскажите, в классе объявляю указатель на объект, сам объект создан в не этого класса, вопрос - нужно ли удалять указатель на этот объект...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

31
Vourhey
Почетный модератор
6487 / 2261 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
01.04.2013, 12:52 #2
Цитата Сообщение от vdvoid Посмотреть сообщение
delete[] a;
.....
1
vdvoid
3 / 3 / 0
Регистрация: 26.02.2011
Сообщений: 99
01.04.2013, 13:03  [ТС] #3
а то что она присваивается "char *a;" ни как не влияет? ни чего не теряется?
0
ForEveR
В астрале
Эксперт С++
7986 / 4745 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.04.2013, 13:05 #4
vdvoid, Оператор delete используется когда выделялось через оператор new, когда же выделялось через оператор new[] используется operator delete[].
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
01.04.2013, 13:09 #5
мне преподаватель объяснял так:
квадратные скобки ставятся из эстетической манеры "хорошего тона" программирования, чтоб было видно, что освобождается память из под массива, но запись delete a и delete[] a равносильны
0
Vourhey
Почетный модератор
6487 / 2261 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
01.04.2013, 13:14 #6
Цитата Сообщение от Tiva Посмотреть сообщение
квадратные скобки ставятся из эстетической манеры "хорошего тона" программирования, чтоб было видно, что освобождается память из под массива, но запись delete a и delete[] a равносильны
ай-ай-ай...
0
ForEveR
В астрале
Эксперт С++
7986 / 4745 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.04.2013, 13:14 #7
Tiva, Неверно. Преподаватель ваш какой-то странный.

In the first alternative (delete object), the value of the operand of delete may be a null pointer
value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8)
representing a base class of such an object (Clause 10). If not, the behavior is undefined. In the second
alternative (delete array), the value of the operand of delete may be a null pointer value or a pointer
value that resulted from a previous array new-expression
.79 If not, the behavior is undefined. [ Note: this
means that the syntax of the delete-expression must match the type of the object allocated by new, not
the syntax of the new-expression. — end note ]
0
Kastaneda
Jesus loves me
Эксперт С++
4703 / 2907 / 239
Регистрация: 12.12.2009
Сообщений: 7,406
Записей в блоге: 2
Завершенные тесты: 1
01.04.2013, 13:15 #8
Цитата Сообщение от Tiva Посмотреть сообщение
мне преподаватель объяснял так:
квадратные скобки ставятся из эстетической манеры "хорошего тона" программирования, чтоб было видно, что освобождается память из под массива, но запись delete a и delete[] a равносильны
я бОльшей глупости еще наверное не слышал
Default behavior:
— For a null value of ptr, does nothing.
— Any other value of ptr shall be a value returned earlier by a call to the default operator
new[](std::size_t). For such a non-null value of ptr, reclaims storage allocated by the earlier call to the default operator new[].

It is unspecified under what conditions part or all of such reclaimed storage is allocated by a subsequent call
to operator new or any of calloc, malloc, or realloc, declared in <cstdlib>.
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
01.04.2013, 13:16 #9
Цитата Сообщение от Vourhey Посмотреть сообщение
ай-ай-ай...
я лишь процитировал преподавателя. я как плохой программист сам никогда не удаляю за собой память, мне хватает того, как с этим справляется ide
просто ничего серьёзного я не писал
0
Vourhey
Почетный модератор
6487 / 2261 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
01.04.2013, 13:17 #10
Цитата Сообщение от Tiva Посмотреть сообщение
как с этим справляется ide
IDE? Освобождает память? Ты жжешь. На пару с преподавателем.
1
ForEveR
В астрале
Эксперт С++
7986 / 4745 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.04.2013, 13:17 #11
Tiva, Преподавателю вашему дайте почитать стандарт пункт 5.3.5/2.
А IDE между прочим не очищает память, раз пишете на С++ и не используйте smart указатели - очищайте память самостоятельно, память очищает ОС после завершения программы (в большинстве случаев).
0
Kastaneda
01.04.2013, 13:19
  #12

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
стандарт пункт 5.3.5/2.
и 18.4 (в стандарте 2003).

0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
01.04.2013, 13:20 #13
Цитата Сообщение от Vourhey Посмотреть сообщение
IDE? Освобождает память? Ты жжешь. На пару с преподавателем.
опять же, именно этот самый преподаватель говорил, что мы должны удалять за собой динамически выделенную память. однако, когда кто-то не написал delete a; и все работало, препод объяснил, что ide (вижуалка) сама удаляет ненужный мусор в таких не значительных программах.

меня не судите что препод говорил, то я знаю, и пусть оно не так, но я до сих пор никогда не удаляю память, даже когда другой препод(он лучше) по информационной безопасности ругается на утечки памяти и всё такое.
0
Vourhey
Почетный модератор
6487 / 2261 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
01.04.2013, 13:23 #14
Цитата Сообщение от Tiva Посмотреть сообщение
препод объяснил, что ide (вижуалка) сама удаляет ненужный мусор в таких не значительных программах.
не продолжай, а то ты бедного автора темы дезинформируешь перлами своего преподавателя. А ваш препод, случайно, ПО для спутников ГЛОНАСС не кодит?
1
Kastaneda
01.04.2013, 13:23     удаление указателя
  #15

Не по теме:

Цитата Сообщение от Tiva Посмотреть сообщение
препод объяснил, что ide (вижуалка) сама удаляет ненужный мусор в таких не значительных программах.
На самом деле печально, что такие люди работают преподавателями...

2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 13:23
Привет! Вот еще темы с ответами:

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using namespace...

Как сделать функцию от указателя на класс и указателя на метод? - C++
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... - C++
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... как сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
01.04.2013, 13:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.