Форум: Форум C++Разное
Новые темы: 00
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: создание и удаление указателей с обнулением
 
 автор: vvmcpp   (19.01.2011 в 08:30)   письмо автору
 
 

Вопрос про создание и удаление указателей

Вот продолжаю изучать с++
И дошел в книге до изучения указателей и ссылок.
Научился их использовать и указатели и ссылки.

Несколько примеров сделал, но не совсем понятно вот какой вопрос:

1. например я создал указатель так: long *pLong=new long;
2. я его удалил так delete pLong;

как его обнулить после этого? рекомендуется его обнулить.
понятно что если он в объекте то его обнулять не нужно и он удалится при удалении объекта.
Но вот когда он создается у меня например в функции.

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

1. вариант pLong=0; - тут я как бы указываю на ноль
2. варант *pLong=0; - тут я обнуляю содержимое моего указателя , который я вроде как удалил

В книге написана рекомендация обнулить, а как обнулить не сказанно

Есть ли стандартные решения этого вопроса?
Вот я пробовал создать указатель , удалить его и
потом создать указатель с таким же именем но почемуто у меня так не получилось
и компилятор выдал ошибку.
И не совсем понятно тогда - будет ли утечка памяти всегда?
Или при удалении указателя память освободилась?


Книга называется Освой самостоятельно С++ за 21 автор Джесс Либерти

вот пример:


// Листинг 8.9
// пример возникновения бдуждающего указателя

/*
рекомендации по устранинию ошибки

применять оператор delete
Проверять значение возвращаемые оператором new
Убнулять указатель после удаления и не использовать его далее

*/

typedef unsigned short int USHORT;
#include <iostream>
using namespace std;


int main(){
    USHORT *pInt =new USHORT;
    *pInt =10;
    cout<<"* pInt "<<*pInt<<endl;
    delete pInt;

    long *pLong=new long;
    *pLong=9000;
    cout<<"*pLong "<< *pLong<<"\n";
    *pInt=20; // присвоение освобожденному указателю
    
    
    //здесь *pLong незвестно как исменяется
     cout<<"* pInt "<<*pInt<<endl;
    cout<<"*pLong "<< *pLong<<"\n";
    
    
    delete pLong ;
    
// чтобы консольное приложение не закрывалось сразу я добавил
    int o;
    cin>>o;
    return 0;
    }

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования