Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
#1

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

06.09.2012, 11:51. Просмотров 1479. Ответов 8
Метки нет (Все метки)

Задание:
Напишите программу с блуждающим указателем. Исправьте программу чтобы блуждающий, стал нулевым.

Мое представление о решении задания я написал в комментах, правильное ли оно?
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 минут
Хм, что никто на форуме не может проверить? Оо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 11:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверьте правильность нулевого указателя (C++):

Обнаружением нулевого указателя - C++
Делаю алгоритм Хаффмана. Возникла проблема при построении таблицы соответствий. void MakeT (Node* root){ if(root-&gt;L!=NULL)...

Разыменование нулевого указателя - C++
Как вообще по стандарту ведет себя программа после разыменования нулевого указателя? Указано-ли это явно? Просто сегодня на работе...

Вызов delete для нулевого указателя - C++
Здравствуйте. Прочитал про конструктор переноса, в котором при копировании, необходимо обнулить все указатели, чтобы при удалении...

почему не происходит разыменования нулевого указателя? - C++
вот думаю, почему сия конструкция не вылетает: #define offsetof(type, member) (size_t)(&amp;(((type*)nullptr)-&gt;member))... видимо не происходит...

Бинарные деревья. Ошибка нулевого указателя - C++
При выполнении программы возникла следующая ошибка: ptr было nullptr. Что это значит и как ее исправить?Возникает в функции make в цикле...

Null или 0 для нулевого указателя - C++
Здравствуйте. Появился вопрос что использовать лучше для создания нулевого указателя null или 0?

8
panicwassano
592 / 560 / 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;
0
MrCold
858 / 756 / 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;
}
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 12:25 #4
что такое "блуждающий указатель"?
0
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
06.09.2012, 13:26  [ТС] #5
Как я понял "блуждающий указатель" - это указатель после того, как его выделенная память была уничтожена, а ты присваиваешь этому указателю новое значение, без выделения для него памяти.
MrCold
Спасибо, прочитал еще раз про указатели и понял, что сама ошибка у меня в повторном назначании значения указателю после оператора delete.

З.Ы. Очень туго пошло изучение указателей и ссылок, много непонятного, и нет человека который бы направил на путь истинный.
0
Герц
524 / 341 / 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 становится блуждающим
}
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.09.2012, 17:37 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Классно нынче программирование преподают: "Напишите программу с ошибками. Исправьте ошибки."
Прелестно!
4
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 17:42 #8
Цитата Сообщение от Герц Посмотреть сообщение
Блуждающий указатель - тот, которому не задано начального значения (явно или неявно)
C++
1
2
int *pInt; // создаюм "блудный" указатель
pInt = NULL; // делаем из него нулевой :)
зачем много писать? преподаватель только запутается.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.09.2012, 18:27 #9
Ты, видимо, не понял.
Я привел примеры dangling указателей, причем тут "преподаватель запутается"?
0
06.09.2012, 18:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 18:27
Привет! Вот еще темы с ответами:

Проверить правильность реализации умного указателя - C++
? template&lt;class T&gt; class Auto_Ptr { public: Auto_Ptr(); explicit Auto_Ptr(T* alloc); virtual ~Auto_Ptr(); ...

Проверить правильность преобразования указателя - преобразование из void* - C++
Есть один абстрактний и один не абстрактний клас. В виртуальний метод передаеться указатель на void. Можно как-то проверить правильность...

проверьте на правильность - C++
Вычислить значения функции у=4х3-2х2+5 для значений х, изменяющихся от -3 до 1, с шагом 0.1. #include &lt;stdio.h&gt; #include &lt;iostream&gt; ...

проверьте на правильность - C++
Нужно удвоить нечётные элементы (количество строк m - 4, а столбцов n - 3) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru