Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886

Допустимые операции с нулевым указателем

20.04.2015, 09:28. Показов 7247. Ответов 121
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не if (all) delete all;, а delete []all;

Не по теме:

если че, ТС не я :D
Это вырезано из другой темы (не моей) и создана как отдельная.



 Комментарий модератора 
Эта ветка была вырезана из другой темы, т.к. количество оффтопа превысило все допустимые рамки.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2015, 09:28
Ответы с готовыми решениями:

Операции с указателем к char[]
Есть некая структура, например WNDCLASSA, где её члены: typedef struct tagWNDCLASSA { UINT style; WNDPROC ...

Что будет с указателем после использования операции delete?
Имеется код: #include <iostream> using namespace std; int main() { int *wtf_ptr; wtf_ptr=new int(8);

В чем разница между указателем и указателем на указатель?
int x, *p, *q; x=10; p=&x; q=p; cout<<*q; int x, *p, **q; x=10; p=&x; q=&p;

121
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 12:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от daslex Посмотреть сообщение
Объясни мне чем та проверка не бесполезна.
ты про эту?
C++
1
if(arr) delete arr;
абсолютно бесполезна потому, что вполне себе dеlete NULL стандартная ситуация, которая ничего не делает
0
20.04.2015, 12:28  [ТС]

Не по теме:

ValeryS, Да про это. Наш собеседник убежден в обратном.

0
20.04.2015, 12:35

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
Наш собеседник убежден в обратном.
судя по этому
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
на 80286 640кб озу (Borland C++ 3.1.).
все еще живет старыми предрассудками, проверка нужна для free

0
20.04.2015, 12:37  [ТС]

Не по теме:

Кстати с free То, что я попросил удалить удаляется без замечаний :D (это если эту тему кто-то еще читает из новичков и наш диалог ему интересен, это ему на заметку)


Не по теме:

Я это сейчас к тому, что мешать все-таки не стоит не потому что читаемость ухудшает, а потому что не знаешь что это делает - не надо этого делать.

0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 12:45
Цитата Сообщение от ValeryS Посмотреть сообщение
абсолютно бесполезна потому, что вполне себе dеlete NULL стандартная ситуация, которая ничего не делает
С каких пор? Это Exception не выкидывает сама по себе. А деструкторы вызывает. А там много чего может сидеть кроме удаления распределенных блоков, вплоть до рекурсивных алгоритмов, которые оповещают другие объекты об удалении, а куда оно пойдет оповещать и по каким адресам пытаться удалять с this==null... одному rand известно.

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
се еще живет старыми предрассудками, проверка нужна для free
Для free она как раз не нужна.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
20.04.2015, 12:48  [ТС]

Не по теме:

Указатель никуда не указывает. Куда мне идти. Нафиг иди :D



Добавлено через 3 минуты

Не по теме:

Fulcrum_013, оператор delete у null почитайте чуть-чуть. Хотя бы до 3 поста (включительно)

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.04.2015, 12:51
МАРКИЗОЧКА, Судя по всему хочется сделать область памяти, в которой конструировать объекты. Ну что ж, как-то так например.
Допустим есть некий тип T объекты которого мы хотим хранить.

C++
1
2
3
4
5
6
7
8
9
char* memory = static_cast<char*>(operator new(1000)); // указатель на область памяти в 1000 байт
// некий код
T* object = new(memory) T(); // создаем объект по адресу memory
T* second_object = new(memory + sizeof(T)) T(); // создаем объект по адресу memory + sizeof(T).
// поработали с объектами, больше они не нужны.
object->~T();
second_object->~T();
// объекты удалены, память осталась, чистим всю память.
operator delete(memory);
Естественно это лучше завернуть в какой-нибудь объект или взять что-нибудь готовое.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 12:54
Цитата Сообщение от daslex Посмотреть сообщение
Ну так и удали его с помощью delete вообще без замечаний компилятора.
Да оно у меня и так без warnings удаляется. кстати free и malloс никогда не использовал. потому как сразу как С++ осваивал (борландовская тогда была еще 1.0) начинал ужо вобщем то практически с ходу с ООП (вернее переходил с паскаля).
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 12:54
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
С каких пор?
с незапамятных
стандарт
5.3.5 Delete п.п 2 яно говорит что delete с нулевым указателем ничего не делает
.....delete is the null pointer the operation has no effect
0
20.04.2015, 12:57  [ТС]

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Да оно у меня и так без warnings удаляется.
В каком компиляторе? У меня в Windows7 GCC 4.6 предупреждение даже без единого флажка.

0
20.04.2015, 13:00

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
оператор delete у null почитайте чуть-чуть. Хотя бы до 3 поста (включительно)
У меня более надежный источник информации - трассировка. Можно конечно проверку перенести в деструктор типа if(!this) return; но тогда их много сработает, потому как деструкторы касксдом вызываются. т.е. одна проверка перед delete избавляет от проверок и indirect call на всю глубину иерархии.

0
20.04.2015, 13:01  [ТС]

Не по теме:

Я тоже с Паскаля. Начинал с Borland C++3.1 потому что поиск-скотина (Гугл и Яндекс) по одной букве С не ищет

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.04.2015, 13:02
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Можно конечно проверку перенести в деструктор типа if(!this) return; но тогда их много сработает, потому как деструкторы касксдом вызываются. т.е. одна проверка перед delete избавляет от проверок и indirect call на всю глубину иерархии.
Никогда этого делать нельзя. Это абсолютно бессмысленно, this не равен нулю никогда.
http://stackoverflow.com/quest... is-is-null
1
20.04.2015, 13:02  [ТС]

Не по теме:

Что значит более надежный источник информации чем информация выдаваемая вполне признанным компилятором???????????????????????????? ?????????????

0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 13:03
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
У меня более надежный источник информации - трассировка.
надежней чем стандарт?
и сколько компиляторов оттрасировал?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
if(!this) return;
интересно а может быть this равен NULL? и что это такое
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
20.04.2015, 13:19  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
интересно а может быть this равен NULL? и что это такое
Парадокс Рассела

Добавлено через 12 минут
Если бы не были абстрагированы от того, что кроме Вас, Ваших надежных методов и Ваших надежных инструментов существует колоссальное множество других методов и инструментов, было бы лучше. Не все же используют Ваши методы и Ваши инструменты для решения своих задач. Есть кто использует Ваши методы в своих инструментах для решения своих задач и т.д. и т.п.
Если есть проблема, возникающая при решении, значит где-то существует прокол. Не обязательно этот прокол должен быть виден во всех без исключения инструментах или готовых программах. (P.S. Я это не ValeryS)
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 13:21
Цитата Сообщение от ForEveR Посмотреть сообщение
Никогда этого делать нельзя. Это абсолютно бессмысленно, this не равен нулю никогда.
http://stackoverflow.com/quest... is-is-null
Не то место читаете. Они наверно не знают что this это просто скрытый параметр передаваемый функции. void Type::Method(); на самом деле Method(Type* this); и соответственно NullPointer->Method() на самом деле Method(NullPointer). вот вам и this==NULL
Удаление NULL вызовет его деструктор c this==NULL.
Миниатюры
Допустимые операции с нулевым указателем  
0
20.04.2015, 13:25

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
Что значит более надежный источник информации чем информация выдаваемая вполне признанным компилятором???????????????????????????? ?????????????
Какая информация и каким компилятором?

0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 13:26
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
вот вам и this==NULL
что означает this NULL ???
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
20.04.2015, 13:29  [ТС]
Не буду отрицать, что про this Никогда не равен NULL я не знаю.
А почему не знаю?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class T{
    public:
  void foo(){
    if (this==NULL) cout<<"OK\n";  //Выводится же. Значит this==NULL
  };
};
 
int main()
{
 
 
T *obj=NULL;
obj->foo();
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.04.2015, 13:29

Переделать функцию c указателем на int, на функцию с указателем на void
Есть рабочий код qsort для int: void qsort(int *base, int n) { // Прекратить если количество элементов меньше либо равно единице....

Допустимые операции для стека
Из стека нельзя выводить без удаления, так что так он по идее и должен себя вести, если только не прикручен для наблюдения.

Перечислите операции, допустимые для переменных-массивов
Здравствуйте. Я не могу понять вопрос, имеется введу что можно делать с элементами массива? Или с самими массивами? Нашёл только,...

Перечислить допустимые операции при работе с очередью
бырее ктонить плз Добавлено через 30 минут эгээй К слову бырее: Правила п.5.1. Уважительно относитесь к другим участникам...

Хранимые процедуры (допустимые операции внутри тела)
Подскажите пожалуйста: как я понял, в хранимых процедурах запрещается выполнять операции по модификации таблиц(добавление, редактирование)...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru