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

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

20.04.2015, 09:28. Показов 7234. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Запрет пометки на удаление и отмены проведения
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
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru