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

NullReferenceException - C++

Восстановить пароль Регистрация
 
Dizelektwo
Сообщений: n/a
04.02.2012, 20:14     NullReferenceException #1
Здравствуйте, ребят. Второй месяц изучаю С++, вот на днях задался целью написать связанный список. К сожалению, материала по этой теме не столько много поэтому после прочтения двух статей я взялся за дело. Вот что у меня вышло:

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
68
69
70
71
72
#include <stdafx.h>
#include <iostream>
#include <cstdlib>
#include <string>
 
using namespace std;
 
class intList {
 
private: 
    struct list {
 
    string data;
    list* next;            //текущий элемент, предыдущий и следующий. 
    list* brek;
 
    };
 
    list* top;              //верхушка и начало списка. Cчетчик
    list* start;            
    int counte;
 
public:
     void lis();
      void addTo(string mes);
 
};
 
void intList::lis() {
top=NULL;
start=NULL;
counte=NULL;
       
               }
 
void intList::addTo(string mes) {
                       
list *temp = new list;
                     
if(top==NULL) {                           // Ошибка в этих строках
                                                
    temp->data=mes;              
    temp->next=NULL;
    temp->brek=NULL;
    top=temp;
    start->next=temp;
        counte++;
 
}
               else {
                      
                temp->data=mes;
        temp->brek=start;
        temp->next=NULL;
        start=temp;
        counte++;
 
                      }
 
}
 
int main() {
 
intList* p;
string sl;
sl="hello";
 
p->addTo(sl);
 
system("pause");
return 0;
}
Выскакивает следующая ошибка:

Необработанное исключение типа "System.NullReferenceException" произошло в my.exe

Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.

Я не понимаю в чем дело. В методе addTo класса intList я проверяю элемент этого же класса top на NULL.
Чем конкретно там недоволен компилятор? Как нужно явно указать?
Может код покажется кому-то ужасным, прошу сделать замечания и если Вам не лень -дайте советы. Спасибо Вам за раннее.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2012, 20:14     NullReferenceException
Посмотрите здесь:

System.NullReferenceException C# .NET 3.x
C# Ошибка NullReferenceException
NullReferenceException C#
NullReferenceException C++/CLI WinForms
C++ Вывод char* вызывает System.NullReferenceException
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.02.2012, 20:23     NullReferenceException #2
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
68
69
70
71
72
73
74
75
#include <iostream>
#include <cstdlib>
#include <string>
 
using namespace std;
 
class intList {
 
private:
    struct list {
 
        string data;
        list *next;            //текущий элемент, предыдущий и следующий. соответственно
        list *brek;
 
    };
 
    list *top;              //верхушка и начало списка
    list *start;
    int counte;
 
public:
    void lis();
    void addTo(string mes);
 
};
 
void intList::lis() {
    top = NULL;
    start = NULL;
    counte = 0;
 
}
 
void intList::addTo(string mes) {
 
    list *temp = new list;
 
    if(top == NULL) {                         // Ошибка в этих строках
 
        temp->data = mes;
        temp->next = NULL;
        temp->brek = NULL;
        top = temp;
        start->next = temp;
 
 
    }
    else {
 
        temp->data = mes;
        temp->brek = start;
        temp->next = NULL;
        start = temp;
        counte++;
 
    }
 
}
 
int main() {
 
    intList p; // Было intList *p; создавался только лишь указатель,
               // а не сам список (никаких членов данных не
               // создавалось); второй вариант был в выделении
               // памяти под список динамически, но это здесь ни к
               // чему
    string sl;
    sl = "hello";
 
    p.addTo(sl); // Было p->addTo(sl);
 
    system("pause");
    return 0;
}
Пока это. Программа теперь компилируется и работает. Сам код не смотрел, только основные моменты, которые подкорректированы и прокомментированы.
Dizelektwo
Сообщений: n/a
04.02.2012, 22:14     NullReferenceException #3
Да, спасибо Вам! Теперь все работает включая и интератор и ф-ю удаления. Благодарен Я так и думал что на мелочи какой-то лоханулся)

Добавлено через 1 час 42 минуты
Да, может кому пригодится. Исправил свои косяки в методе добавления.

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
68
69
70
71
72
73
74
75
#include <stdafx.h>
#include <iostream>
#include <cstdlib>
#include <string>
 
 
using namespace std;
 
class intList {
 
private: 
    struct list {
 
    string data;
    list* next;
    list* brek;
 
    };
 
    list* top;
    list* bottom;
    int counte;
 
public:
     void lis();
     void addTo(string mes);
     void printTo(); 
 
};
 
void intList::lis() {
top=NULL;
bottom=NULL;
counte=NULL;
 
       
               }
 
void intList::addTo(string mes) {
                       
list *temp = new list;
                     
if(bottom==NULL) {
                  
    temp->next=NULL;
    temp->data=mes;
    temp->brek=NULL;
    bottom=temp;
    counte++;
 
}
               else {
                top->next=temp;      
                temp->data=mes;
        temp->brek=top;
        temp->next=NULL;
        top=temp;
        counte++;
                
                      }
 
}
 
int main() {
 
intList p;
string sl;
sl="hello";
 
p.addTo(sl);
 
 
system("pause");
return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.02.2012, 22:20     NullReferenceException #4
Цитата Сообщение от Dizelektwo Посмотреть сообщение
Теперь все работает включая и интератор...
итератор или интератор (iterator ог interator)
Yandex
Объявления
04.02.2012, 22:20     NullReferenceException
Ответ Создать тему
Опции темы

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