Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/47: Рейтинг темы: голосов - 47, средняя оценка - 4.74
Заблокирован

Как проверить, быль ли удалён указатель или нет?

07.06.2013, 11:23. Показов 10456. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С похмелья голову заклинило

X* x=new X();
delete x;

if(x) ? или как? Как проверить, удалён на данный момент указатель или нет?
P.S.: стыдно за вопрос ....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2013, 11:23
Ответы с готовыми решениями:

Как через VkNet прочекать ID аккаунта удалён он или нет
Нужно через VkNet проверять ID удален ли аккаунт или нет. Но каким методом еффективно это делать я так и не понял

Как включить автосохранение проекта или проверить включено или нет?
как включить автосохранение проекта ? или проверить включено или нет ?

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

26
Заблокирован
07.06.2013, 12:41  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ForEveR Посмотреть сообщение
Possible definitions include 0 and 0L, but not (void*)0.
что то я не понял этой фразы. Так что, говорят, что возможно использовать 0 или 0L, тоесть возможно, но конкретно никто не рекомендует. Тоесть что лучше то юзать?

А but not (void*)0. это чё? Что я не могу указателю типа воид присвоить ноль?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.06.2013, 12:43
FarStar, NULL - implementation-defined. Возможные объявления включают
C++
1
2
#define NULL 0
#define NULL 0L
Но он точно не может быть:
C++
1
#define NULL (void*)0
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.06.2013, 13:13
1-е говорил я прибилизительно о таком случае
(т.е написали класс, деструктор не сделали либо сделали бездумно и про очистку забыли, можно раскоментить деструктор, а у нас так добрая половина форума пишет) как и говорил - алокнутая мемори при неправильном либо отсутсвующем деструкторе никуда не денется - это я о
C++
1
cout<<ptr<<endl;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
using namespace std;
 
class test
{
private :
    char * ptr;
public  :
      test();
     //~test();
     bool init();
     bool init(const char *str);
     bool show();
     void rset();
     char * pointer(){return ptr;};
};
 
test::test()
{
    ptr = new char[8];
}
 
/*test::~test()
{
    //
}*/
 
bool test::init()
{
    bool bInit = ptr != NULL;
    if( bInit )
        strcpy(ptr, "test");
    return bInit;
}
 
bool test::init(const char * str)
{
    bool bInit = str != NULL;
    if( bInit )
        strcpy(ptr, str);
    return bInit;
}
 
bool test::show()
{
    bool bShow = ptr != NULL;
    if( bShow )
        cout<<ptr<<endl;
    return bShow;
}
 
void test::rset()
{
    if( ptr )
        delete [] ptr;
}
 
int main()
{
    test * x = new test();
    test * y = x;
    x->init("bla bla");
    x->show();
    char * ptr = x->pointer();
    x->~test();
    x->~test();
    delete x;
    x = NULL;
    cout<<ptr<<endl;
    if(!x)
        cout<<"x - empty"<<endl;
    cin.get();
    return 0;
}
http://codepad.org/1Fj6Mhjr

2-е на счёт деструктора вызывать его можно - это такой же метод как и все остальные,
если написан умно то его вызов хоть 200 раз ни к чему ужастному кроме как очистке памяти и обнулению объектов не приведёт (конечно же для существующего объекта)

Смысл того что я закладывал свой ответ сводился к такому
Если пишем классы работающие с памятью то лучше предусмотреть спец метод по очистке памяти, а не делать чистку в деструкторе. Этими же методами можно будет производить "перезапуск класса" посредством очистки старой мемори и выдления новой в методе инициализации.
Я предпочитаю писать с явным членом класса а не динамическим. Тогда нет никаких двусмысленностей и прочих ньюансов.
Некотрые ответы в данной теме меня явно позабавили. Кроме цели помочь я ничего не приследовал, не понятен мой ход мыслей и кажется неверным - ну ок. Я решил написать, а то не дай бог кто то тут за слив посчитает моё выполнение рабочих обязанностей в результате чего пишу с задержкой.

Не по теме:

ЗЫ На счёт NULL - вот что это за деф в студии

C++
1
2
3
4
5
6
7
8
9
/* Define NULL pointer value */
 
#ifndef NULL
#ifdef  __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

Миниатюры
Как проверить, быль ли удалён указатель или нет?  
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.06.2013, 13:27
-=ЮрА=-, UB есть UB. Программа, содержащая UB не является well-formed программой.
Once a destructor is invoked for an object, the object no longer exists; the behavior is undefined if the
destructor is invoked for an object whose lifetime has ended (3.8). [ Example: if the destructor for an
automatic object is explicitly invoked, and the block is subsequently left in a manner that would ordinarily
invoke implicit destruction of the object, the behavior is undefined. — end example ]
Если так хочется вызывать явно деструктор, то Free стоит переделать так
C++
1
2
3
4
5
6
7
template<typename T>
void Free(T*& x)
{
   x->~T();
   operator delete(x);
   x = NULL;
}
2
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.06.2013, 13:35
ForEveR, если прочтёшь внимательно найдёшь вот такие слова
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вызывай либо деструктор
x->~X();
либо предусмотри метод очистки
x->Free();
для поинтера мемори всегда будет ненулевой
- дальше была лишь попытка показать как всё можно соединить в одни шаблонный метод и использовать в программе для любого класса, не боясь что что-либо не обнулилось.

Не по теме:

Ладно ForEveR, у меня есть работа и 2 заказа фриланса + ещё два преокта на послеоплатной поддержке, с топиком уже давно всё ясно и так у меня нет времени на разговоры о чём я и так имею представление.

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.06.2013, 13:37
-=ЮрА=-, Твоя попытка ведет к UB. Я тебе написал, как это должно выглядеть, чтобы не было 2 вызовов деструктора - это все.
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.06.2013, 14:04
ForEveR, Да причём здесь UB Не UB?!Речь шла о том - что гораздо практичней создать метод по очистке памяти, а лучше шаблон, который ещё занулит указаетль. Вот запиши мой метод вот так и наслаждайся, сравни отработку кода выше и этого http://codepad.org/oQ7vxQwy
Если в проекте 40 классов гораздо удобней написать rset в каждом и 100% быть уверенным что после Free всё занулиться и вытреться из памяти.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2013, 14:04
Помогаю со студенческими работами здесь

Как проверить, на главной я или нет?
Как проверить на главной странице я или нет, тоесть есть ли что-то после / окончания домена

Как проверить checked или нет
Доброго времени суток подскажите как проверить отмечен или нет checkbox и отправить через GET &lt;script...

Как проверить, рабочий БП или нет?
как проверить рабочиё бп или нет. Заранее благодарен!!!

Как проверить запущенно ли приложение или нет?
Есть некоторый код, нужно сделать проверку процесса, если он существует, скопировать текст, если нет, открыть приложение и затем...

Как проверить, существует ли директория или нет
Доброе время суток. Вот столкнулся с такой задачкой, нужно проверить существует ли директория, если да то поставить галочку на...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru