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

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

20.04.2015, 09:28. Показов 7209. Ответов 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
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 13:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ValeryS Посмотреть сообщение
и сколько компиляторов оттрасировал?
Та вот подхожу к тому что скоро буду и компилятор трассировать. Самодельный. Более толковых способов отладки чем трассировка пока что не придумали.
Цитата Сообщение от ValeryS Посмотреть сообщение
надежней чем стандарт?
Естественно. Видно построчно что прога делает при удалении NULL, какие деструкторы вызывает и с какими параметрами.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
что означает this NULL ???
То и означает - указатель this равен 0, т.е. указывает на первую ячейку памяти.

Добавлено через 3 минуты
Цитата Сообщение от daslex Посмотреть сообщение
Не буду отрицать, что про this Никогда не равен NULL я не знаю.
А почему не знаю?
А теперь то же самое только с удалением и деструктором.
Эхо кстати тоже хорошее средство когда не доступна трассировка. Под PHP именно этот способ и пользую.
0
20.04.2015, 13:38  [ТС]

Не по теме:

Я сразу сказал. случай тяжелый :D
А это у Вас в самодельном оно предупреждений не выдавало? Вы мой вопрос проигнорировали.
Обнадежили только надежным источником информации...
Пока что Ваш надежный источник выглядит сомнительно

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.04.2015, 13:40
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Не то место читаете. Они наверно не знают что this это просто скрытый параметр передаваемый функции. void Type::Method(); на самом деле Method(Type* this); и соответственно NullPointer->Method() на самом деле Method(NullPointer). вот вам и this==NULL
Удаление NULL вызовет его деструктор c this==NULL.
Выкиньте нафиг свой компилятор. Это не соответствует стандарту С++, значит на помойку.
Вызов delete на nullptr - не должен делать ничего, уж тем более не должен вызывать деструктор несуществующего объекта.
Вызов метода через 0 указатель является UB и учитывая, что программа поведет себя непредсказуемо, проверка на ноль бессмысленна.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 13:41
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
То и означает - указатель this равен 0, т.е. указывает на первую ячейку памяти.
ячейку памяти чего?
this указатель на объект класса, если this равен NULL то где находится этот объект
а если объекта нет то на что указывает this?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Естественно.
Я правильно понимаю, что по твоему мнению, стандарт пишут под компиляторы, а не наоборот
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Более толковых способов отладки чем трассировка пока что не придумали.
расстановку брекпоинтов, отладочную печать еще для себя не открыл ?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 13:41
Цитата Сообщение от daslex Посмотреть сообщение
А это у Вас в самодельном оно предупреждений не выдавало?
В bcc, bcc32, bcc64
кстати окошко от C++ Builder XE6
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 13:43
Цитата Сообщение от daslex Посмотреть сообщение
А почему не знаю?
наверно потому что это софистика
Цитата Сообщение от daslex Посмотреть сообщение
T *obj=NULL;
obj->foo();
объект то не создается

Добавлено через 44 секунды
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
C++ Builder XE6
всегда славился своим прочтением стандарта
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
20.04.2015, 13:45  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
объект то не создается
Это в ошибках есть? Я как-то не видел, но имеет смысл там этому быть. В смысле о this, потому что я вот до сих пор не знал.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 13:53
Цитата Сообщение от daslex Посмотреть сообщение
Это в ошибках есть?
не понял, в каких ошибках?
попробуй
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;
obj->foo();
 
 
}
что покажет?

кстати в таком варианте
C++
1
if(obj) delete obj;
delete сработает, правда что она удалит никто не знает


по моим наблюдением в Си( а равно в плюсах) есть две крайности, или не делают проверку там где нужно, или делают там где она бесполезна
0
20.04.2015, 13:58  [ТС]

Не по теме:

Да я о теме распр. ошибки. Наверняка встречаются такие, кто может пытаться применять такое сравнение this к NULL. Я описать этого грамотно не могу, например.

0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 14:02
Цитата Сообщение от daslex Посмотреть сообщение
Да я о теме распр. ошибки.
знаешь я об этой "ошибке" только здесь узнал
и Сергей Сергеич не приветствует обсуждения в той теме, тем более дискуссии, а вопрос то достаточно спорный
надеюсь если его заинтересует, перенесет туда
0
20.04.2015, 14:04  [ТС]

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
что покажет?
что объект не создается, наверное...

0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 14:06
Цитата Сообщение от ValeryS Посмотреть сообщение
расстановку брекпоинтов, отладочную печать еще для себя не открыл ?
А трассировка это что по твоему не расстановка брекпоинтов и пошаговое выполнение программы? Отладочная печать на втором месте по удобству/информативности.

Цитата Сообщение от ValeryS Посмотреть сообщение
ячейку памяти чего?
ОЗУ естественно. ральной или виртуальной от ос зависит, но один хрен начало таблицы векторов прерываний.
Цитата Сообщение от ValeryS Посмотреть сообщение
this указатель на объект класса, если this равен NULL то где находится этот объект
А что такое объект? Это структурированный тип данных. Где находятся данные если указатель на их начало равен NULL? код обрабатывающий эту структуру для статических методов там где был там и останется потому как работает через call и адреса кода методов зашиты в самой инструкции вызова. а вот с виртульальными получится большая бяка потому как они работают через indirect call и адреса лежат в этой структуре на которую this указывает.

Цитата Сообщение от ValeryS Посмотреть сообщение
а если объекта нет то на что указывает this?
если нету объекта то нету и this. this это скрытый параметр метода, и существует он естественно только в скопе метода. Вообще сначала в С++ никаких классов (на уровне компилятора) не было, они реализовывались средствами препроцессора. Ликбез, первый семестр.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 14:11

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
Да я о теме распр. ошибки. Наверняка встречаются такие, кто может пытаться применять такое сравнение this к NULL. Я описать этого грамотно не могу, например.

Таблица векторов прерываний тоже может обрабатываться с помощью классов. Адрес ее начала - NULL

Добавлено через 57 секунд
Цитата Сообщение от daslex Посмотреть сообщение
, которая нервно курит в сторонке, читая ответ на свой вопрос..
Ниче, зато может поймет что такое класс, объект указатель и с чем их едят
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
20.04.2015, 14:16  [ТС]
МОжно узнать только специфические особенности, но не суть этой темы по нашим диалогам. В тем более тут слишком мало ответов на изначальные вопросы.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 14:18
Цитата Сообщение от daslex Посмотреть сообщение
В тем более тут слишком мало ответов на изначальные вопросы.
У изначальных вопросов ноги растут от непонимания того что такое указатель.

Не по теме:

А многие неизначальные от непонимания того что компьютер - машина Тюринга

0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 14:19
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
this это скрытый параметр метода,
ссылку на определение
при такой записи
C++
1
this->a =10;
какого метода какой параметр?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Где находятся данные если указатель на их начало равен NULL?
вот я и спрашиваю?
0
20.04.2015, 14:19  [ТС]

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Какая информация и каким компилятором?
предупреждения gnu gcc без каких бы-то ни было галочек на поиски ошибок. Я это уже писал.

0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
20.04.2015, 14:22
Цитата Сообщение от ForEveR Посмотреть сообщение
Вызов delete на nullptr - не должен делать ничего, уж тем более не должен вызывать деструктор несуществующего объекта.
А кто сказал что по адресу NULL не может существовать ВАЛИДНОГО объекта?
С тем же успехом можно сказать что delete не должен вызывать вообще никакие деструкторы, а тем более виртуальные, т.к. не может проверить ВАЛИДНОСТЬ объекта находящегося по переданному ему указателю.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.04.2015, 14:25
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Таблица векторов прерываний тоже может обрабатываться с помощью классов. Адрес ее начала - NULL
прям таки везде?
например у cortex там лежит указатель на стек
Цитата Сообщение от daslex Посмотреть сообщение
В тем более тут слишком мало ответов на изначальные вопросы.
я бы ответил если б понял вопрос
что нужно? динамический массив
массив указателей
или в выделенной памяти создать объект ( Placement new)

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А кто сказал что по адресу NULL не может существовать ВАЛИДНОГО объекта?
стандарт
NULL это не адрес 0, а несуществующий адрес
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
20.04.2015, 14:29  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
что нужно? динамический массив
я сказал вопросов, а не вопроса. Тут изначально 3 вопроса.
1. ТС (и мало на него ответов)
2. delete [] vs delete
3. if (ptr) delete ptr;

Ну и где ответы. Как мы мимолетно и беззаботно перешли к
Цитата Сообщение от ValeryS Посмотреть сообщение
Таблица векторов прерываний тоже может обрабатываться с помощью классов. Адрес ее начала - NULL
(не ваша цитата, я ее скопипастил просто из цитаты.)

Правда, вот оно,
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А кто сказал что по адресу NULL не может существовать ВАЛИДНОГО объекта?
Предвещает ответ на третий вопрос. Вдругэта тайна покрытая мраком раскроется нашим незрячим глазам....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.04.2015, 14:29

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru