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

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

Восстановить пароль Регистрация
 
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 19:31     Указатели и их обнуления #1
Вот допустим есть такая штука.
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];
//...
Можете направить учить матчасть, только укажите куда именно.)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leomana
58 / 58 / 5
Регистрация: 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]; //вот массив указателей!
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;
}
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
22.07.2012, 19:51     Указатели и их обнуления #4
C++
1
2
Parasya* PtrSVIN;
PtrSVIN = new Parasya[4];
Это не массив указателей, а указатель на массив.
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 19:57  [ТС]     Указатели и их обнуления #5
Спасибо теперь понял.
Тоесть мне надо сделать так
Parasya** PtrPtrSVIN;
PtrPtrSVIN = new Parasya* [5];

я правильно понял??
-=MASTER=-
77 / 71 / 5
Регистрация: 15.03.2012
Сообщений: 259
22.07.2012, 19:57     Указатели и их обнуления #6
Вообще надо писать код или текст ошибки.
Удалять массив указателей надо так:
C++
1
delete[] PtrSVIN;
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 19:59  [ТС]     Указатели и их обнуления #7
Насчет удаления я знаю. Еще раз повторю - это упрощенная схема. (Но все равно спасибо за совет)
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 20:00     Указатели и их обнуления #8
C++
1
PtrSVIN[2]
а к чему Вы вообще хотите обратится .. если у Вас
C++
1
Parasya* PtrSVIN;
что здесь интересное 2-е? (ну то есть 3-е)
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 20:02  [ТС]     Указатели и их обнуления #9
Вообще я хотел оптимизировать оперативную память (как бы это смешно не звучало) и составить список из кусочков расположенных в разных местах, а не как обычный массив монолитом. (но видимо как раз это и сделал)
MrCold
851 / 749 / 71
Регистрация: 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;
}
NafNaf
21 / 21 / 1
Регистрация: 22.07.2012
Сообщений: 214
22.07.2012, 20:52  [ТС]     Указатели и их обнуления #11
C2039: ostream: не является членом "std"
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
22.07.2012, 21:16     Указатели и их обнуления #12
Цитата Сообщение от NafNaf Посмотреть сообщение
C2039: ostream: не является членом "std"
http://liveworkspace.org/code/7d5f02...c0af9a6826090f
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 22:00     Указатели и их обнуления
Еще ссылки по теме:

Указатели C++
C++ Указатели
Все строки матрицы, где находится более двух простых чисел, обнулить. Найти среднее арифметическое элементов до и после обнуления C++

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

Или воспользуйтесь поиском по форуму:
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. Просто я думал одно а сделал другое в начале.)
Еще раз всем спасибо.
Yandex
Объявления
22.07.2012, 22:00     Указатели и их обнуления
Ответ Создать тему
Опции темы

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