Форум программистов, компьютерный форум CyberForum.ru

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

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

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

01.04.2013, 12:50. Просмотров 1295. Ответов 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;
как правильно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 12:50     удаление указателя
Посмотрите здесь:

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

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

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

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

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

инициализация указателя - C++
class Item { public: Item() { num0=new char("как");//ошибка cannot convert from 'const char ' to 'char' num1=new...

Использование указателя this - C++
Вообщем решил я задачу: файл 1: // stack.h -- class definition for the stack ADT #ifndef STACK_H_ #define STACK_H_ #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.04.2013, 12:52     удаление указателя #2
Цитата Сообщение от vdvoid Посмотреть сообщение
delete[] a;
.....
vdvoid
3 / 3 / 0
Регистрация: 26.02.2011
Сообщений: 99
01.04.2013, 13:03  [ТС]     удаление указателя #3
а то что она присваивается "char *a;" ни как не влияет? ни чего не теряется?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.04.2013, 13:05     удаление указателя #4
vdvoid, Оператор delete используется когда выделялось через оператор new, когда же выделялось через оператор new[] используется operator delete[].
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
01.04.2013, 13:09     удаление указателя #5
мне преподаватель объяснял так:
квадратные скобки ставятся из эстетической манеры "хорошего тона" программирования, чтоб было видно, что освобождается память из под массива, но запись delete a и delete[] a равносильны
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.04.2013, 13:14     удаление указателя #6
Цитата Сообщение от Tiva Посмотреть сообщение
квадратные скобки ставятся из эстетической манеры "хорошего тона" программирования, чтоб было видно, что освобождается память из под массива, но запись delete a и delete[] a равносильны
ай-ай-ай...
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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 ]
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 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>.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
01.04.2013, 13:16     удаление указателя #9
Цитата Сообщение от Vourhey Посмотреть сообщение
ай-ай-ай...
я лишь процитировал преподавателя. я как плохой программист сам никогда не удаляю за собой память, мне хватает того, как с этим справляется ide
просто ничего серьёзного я не писал
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.04.2013, 13:17     удаление указателя #10
Цитата Сообщение от Tiva Посмотреть сообщение
как с этим справляется ide
IDE? Освобождает память? Ты жжешь. На пару с преподавателем.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.04.2013, 13:17     удаление указателя #11
Tiva, Преподавателю вашему дайте почитать стандарт пункт 5.3.5/2.
А IDE между прочим не очищает память, раз пишете на С++ и не используйте smart указатели - очищайте память самостоятельно, память очищает ОС после завершения программы (в большинстве случаев).
Kastaneda
01.04.2013, 13:19
  #12

Не по теме:

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

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

меня не судите что препод говорил, то я знаю, и пусть оно не так, но я до сих пор никогда не удаляю память, даже когда другой препод(он лучше) по информационной безопасности ругается на утечки памяти и всё такое.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.04.2013, 13:23     удаление указателя #14
Цитата Сообщение от Tiva Посмотреть сообщение
препод объяснил, что ide (вижуалка) сама удаляет ненужный мусор в таких не значительных программах.
не продолжай, а то ты бедного автора темы дезинформируешь перлами своего преподавателя. А ваш препод, случайно, ПО для спутников ГЛОНАСС не кодит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 13:23     удаление указателя
Еще ссылки по теме:

Сдвиг указателя - C++
Помогите ответить на вопрос: На сколько байт передвигается указатель при добавлении к нему(вычитании от него) числа 20? Определите...

Передача указателя - C++
Здравствуйте! Форумчане, очень нужна помощь..:cry: В общем ситуация такова: написана программа, нужно переделать её так, чтобы в...

delete указателя - C++
valueOfWordS - указатель, член класса String_value, конструктору же этого класса передается указатель на переменную того же типа: ...

Возврат указателя - C++
Написать функцию возвращающую ссылку на элемент глобального массива. #include &lt;stdio&gt; #include &lt;conio&gt; #include &lt;iostream&gt; ...

Разыменование указателя! - C++
Всем привет, объясните почему и как это работает? int (*pf)(void); int f(void) { static int count ; pf = &amp;f; //...


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

Или воспользуйтесь поиском по форуму:
Kastaneda
01.04.2013, 13:23     удаление указателя
  #15

Не по теме:

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

Yandex
Объявления
01.04.2013, 13:23     удаление указателя
Ответ Создать тему
Опции темы

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