Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
1

Указатели и их обнуления

22.07.2012, 19:31. Просмотров 1267. Ответов 13
Метки нет (Все метки)

Вот допустим есть такая штука.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//...
class Parasya ()
{
 private:
  int dom;
 
public:
 Parasya ()
 {
   dom=3;
 }
 show ()
 {
  cout<<dom;
 }
}
Parasya* PtrSVIN;
PtrSVIN = new Parasya;
cout<<PtrSVIN;
PtrSVIN=NULL;
cout<<PtrSVIN;
//...
как бы все норм. Создается указатель и он указывает на какой то кусочек памяти и если надо можно обнулить (сделать так чтоб указатель ни на что не указывал).
Но как только я делаю массив указателей что то не ладится .((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//...
class Parasya ()
{
 private:
  int dom;
 
public:
 Parasya ()
 {
   dom=3;
 }
 show ()
 {
  cout<<dom;
 }
}
Parasya* PtrSVIN;
PtrSVIN = new Parasya[4];
cout<<PtrSVIN[2];
PtrSVIN[2]=NULL;// здесь не проглатывает компилятор. Помогите кто чем может.
cout<<PtrSVIN[2];
//...
Можете направить учить матчасть, только укажите куда именно.)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2012, 19:31
Ответы с готовыми решениями:

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс...

Описание метода обнуления поля
#include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;stdlib.h&gt; #include&lt;iomanip&gt;...

Обнуления vector четырьмя способами
В моей задаче встал вопрос о занулении вектора (двумерного) на ~3 миллиона...

Обнуления значения в классе(как устранить)
значение counter обнуляется, как устранить такую проблему? #include...

Srand для обнуления глобальной переменной
Надо для переменной задать рандомное значение, чтобы каждый раз при запуске...

13
Leomana
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 19:47 2
это не код , а хаус какой-то!
Цитата Сообщение от NafNaf Посмотреть сообщение
C++
1
2
3
4
5
6
7
... class Parasya ()// скобки () к чертям удалить
 { private: int dom; 
public: Parasya () 
{ dom=3; }
 show () { cout<<dom; } }; // точка с запятой!
// это что дальше? main типа? 
 Parasya* PtrSVIN[4]; //вот массив указателей!
1
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 19:50  [ТС] 3
не ну может оформление и не все норм. просто я накидал не проверя в компиляторе на память упрощенную схему.
но суть в том что обнулить один из элементов массива указателей я немогу. а обнулить простой указатель можно.

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
int main ()
{
//...
class Parasya
{
 private:
  int dom;
 
public:
 Parasya ()
 {
   dom=3;
 }
 show ()
 {
  cout<<dom;
 }
};
Parasya* PtrSVIN;
PtrSVIN = new Parasya;
cout<<PtrSVIN;
PtrSVIN=NULL;
cout<<PtrSVIN;
//... 
return 0;
}
А вот это уже не работает.

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
int main ()
{
//...
class Parasya
{
 private:
  int dom;
 
public:
 Parasya ()
 {
   dom=3;
 }
 show ()
 {
  cout<<dom;
 }
};
Parasya* PtrSVIN;
PtrSVIN = new Parasya[4];
cout<<PtrSVIN[2];
PtrSVIN[2]=NULL;// тут не работает.!!
cout<<PtrSVIN[2];
//... 
return 0;
}
0
Schizorb
510 / 462 / 82
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
22.07.2012, 19:51 4
C++
1
2
Parasya* PtrSVIN;
PtrSVIN = new Parasya[4];
Это не массив указателей, а указатель на массив.
0
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 19:57  [ТС] 5
Спасибо теперь понял.
Тоесть мне надо сделать так
Parasya** PtrPtrSVIN;
PtrPtrSVIN = new Parasya* [5];

я правильно понял??
0
-=MASTER=-
115 / 73 / 5
Регистрация: 15.03.2012
Сообщений: 259
22.07.2012, 19:57 6
Вообще надо писать код или текст ошибки.
Удалять массив указателей надо так:
C++
1
delete[] PtrSVIN;
0
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 19:59  [ТС] 7
Насчет удаления я знаю. Еще раз повторю - это упрощенная схема. (Но все равно спасибо за совет)
0
Leomana
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 20:00 8
C++
1
PtrSVIN[2]
а к чему Вы вообще хотите обратится .. если у Вас
C++
1
Parasya* PtrSVIN;
что здесь интересное 2-е? (ну то есть 3-е)
0
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 20:02  [ТС] 9
Вообще я хотел оптимизировать оперативную память (как бы это смешно не звучало) и составить список из кусочков расположенных в разных местах, а не как обычный массив монолитом. (но видимо как раз это и сделал)
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
22.07.2012, 20:15 10
Немного дописать и все работает
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
#include <iostream>
 
class Parasya 
{
 private:
 
     int dom;
 
public:
 
 Parasya ()
 {
     dom=3;
 }
 
 ~Parasya (){}
 
 void show ()
 {
    std::cout<<dom;
 }
     friend std::ostream& operator<<(std::ostream& s, const Parasya & t);
     void  operator=(const int val);
     Parasya & operator=(const Parasya & rhs);
 
};
 
 
std::ostream& operator<<(std::ostream& s, const Parasya & t)
{
    s << t.dom << std::endl ;
    return s;
}
 
 
Parasya & Parasya ::operator=(const Parasya & rhs)
{
    if(this == &rhs) 
    {
       return *this;
    }
    dom  = rhs.dom;
    
    return *this;
}
 
void  Parasya ::operator=(const int val)
{   
    dom  = val; 
}
 
 
int main ()
{
Parasya* PtrSVIN;
PtrSVIN = new Parasya[4];
 
std::cout << PtrSVIN[2];
 
PtrSVIN[2] = NULL;
 
std::cout << PtrSVIN[2];
 
delete[] PtrSVIN;
 
  return 0;
}
1
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 20:52  [ТС] 11
C2039: ostream: не является членом "std"
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
22.07.2012, 21:16 12
Цитата Сообщение от NafNaf Посмотреть сообщение
C2039: ostream: не является членом "std"
http://liveworkspace.org/code/7d5f023ba9e212c452c0af9a6826090f
0
Dekio
Фрилансер
Эксперт С++
5838 / 1219 / 499
Регистрация: 23.11.2010
Сообщений: 3,377
Записей в блоге: 1
22.07.2012, 21:22 13
Цитата Сообщение от MrCold Посмотреть сообщение
Parasya & Parasya ::operator=(const Parasya & rhs)
{
if(this == &rhs)
{
return *this;
}
dom = rhs.dom;

return *this;
}
C++
1
2
3
4
5
6
Parasya & Parasya ::operator=(const Parasya & rhs)
{
     if(this != &rhs)
         this->dom = rhs.dom;
     return *this;
}
2
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 22:00  [ТС] 14
Спасибо всем.
Но я именно вот так хотел
C++
1
2
3
Parasya** PtrSVIN;
PtrSVIN = new Parasya* [10];
PtrSVIN[2]=NULL;
Просто у меня как бы контейнер из 10 позиций.
И я их освобождая должен обнулить, вот и присваиваю их NULL. Просто я думал одно а сделал другое в начале.)
Еще раз всем спасибо.
0
22.07.2012, 22:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 22:00

Более практичный метод обнуления полей класса
Всем привет. Программируя на досуге столкнулся с таким вопросом - &quot;обнуление...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье....

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно...


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

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

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