Форум программистов, компьютерный форум CyberForum.ru

Проверьте правильность нулевого указателя - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
06.09.2012, 11:51     Проверьте правильность нулевого указателя #1
Задание:
Напишите программу с блуждающим указателем. Исправьте программу чтобы блуждающий, стал нулевым.

Мое представление о решении задания я написал в комментах, правильное ли оно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main ()
{
int *a=new int;
*a=1000;
cout<<*a<<endl;
delete a;
a=new int;   //как я понял, этими двумя строчками переводится блуждающий
*a=NULL;   //указатель в нулевой.
int *b=new int;
*b=99;
 
cout<<*a<<endl;
cout<<*b<<endl;
 
system ("pause");  
return 0;
}
Добавлено через 19 часов 16 минут
Хм, что никто на форуме не может проверить? Оо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 11:51     Проверьте правильность нулевого указателя
Посмотрите здесь:

Проверьте правильность C++
C++ Разыменование нулевого указателя
C++ проверьте правильность программ
C++ проверьте на правильность
Обнаружением нулевого указателя C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
06.09.2012, 12:14     Проверьте правильность нулевого указателя #2
Цитата Сообщение от Aesonet Посмотреть сообщение
*a=NULL;
тут не указатель нулевой, а значения, вы его разыменовали. В с++11 есть специальный указатель - nulltpr.
да и после этой строчки память из под указателя а не удалена, и вообще непонятно зачем вам эти 2 строки

C++
1
2
a=new int;   //как я понял, этими двумя строчками переводится блуждающий
*a=NULL;
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
06.09.2012, 12:19     Проверьте правильность нулевого указателя #3
Aesonet,

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
int main ()
{
int *a=new int;
  *a=1000;
cout<<*a<<endl;
 
delete a;  // освободить память 
 
int *b=new int;
   *b=99;
 
  cout << *b << endl;
  delete b;
  b = NULL;
 
 // delete a;  /// ошибка !!! < ----  оййй!!!
  
 a = NULL;   //указатель в нулевой.
              // попытка освободить память снова
     delete a; /// ошибки нет 
 
 
system ("pause");  
return 0;
}
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 12:25     Проверьте правильность нулевого указателя #4
что такое "блуждающий указатель"?
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
06.09.2012, 13:26  [ТС]     Проверьте правильность нулевого указателя #5
Как я понял "блуждающий указатель" - это указатель после того, как его выделенная память была уничтожена, а ты присваиваешь этому указателю новое значение, без выделения для него памяти.
MrCold
Спасибо, прочитал еще раз про указатели и понял, что сама ошибка у меня в повторном назначании значения указателю после оператора delete.

З.Ы. Очень туго пошло изучение указателей и ссылок, много непонятного, и нет человека который бы направил на путь истинный.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.09.2012, 15:48     Проверьте правильность нулевого указателя #6
Блуждающий указатель - тот, которому не задано начального значения (явно или неявно), а также указатель, полученный после применения delete на валидный указатель.
C++
1
2
3
4
5
6
7
8
int* ptrGlobal; // не блуждающий указатель
void func()
{
    int* ptr; // висящий(блуждающий) указатель
 
    int* newPtr = new int;
    delete newPtr; // newPtr становится блуждающим
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.09.2012, 17:37     Проверьте правильность нулевого указателя #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Классно нынче программирование преподают: "Напишите программу с ошибками. Исправьте ошибки."
Прелестно!
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 17:42     Проверьте правильность нулевого указателя #8
Цитата Сообщение от Герц Посмотреть сообщение
Блуждающий указатель - тот, которому не задано начального значения (явно или неявно)
C++
1
2
int *pInt; // создаюм "блудный" указатель
pInt = NULL; // делаем из него нулевой :)
зачем много писать? преподаватель только запутается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 18:27     Проверьте правильность нулевого указателя
Еще ссылки по теме:

Проверьте правильность C++
C++ Null или 0 для нулевого указателя
C++ проверьте на правильность

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

Или воспользуйтесь поиском по форуму:
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.09.2012, 18:27     Проверьте правильность нулевого указателя #9
Ты, видимо, не понял.
Я привел примеры dangling указателей, причем тут "преподаватель запутается"?
Yandex
Объявления
06.09.2012, 18:27     Проверьте правильность нулевого указателя
Ответ Создать тему
Опции темы

Текущее время: 04:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru