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

Invalid null pointer - C++

Восстановить пароль Регистрация
 
meJevin
 Аватар для meJevin
153 / 145 / 56
Регистрация: 18.11.2015
Сообщений: 600
Завершенные тесты: 1
03.01.2016, 11:00     Invalid null pointer #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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <conio.h>
#include <list>
#include <string>
 
using namespace std;
 
void addItem(list<string>& exampleList);
void printList(list<string>& exampleList);
void removeItem(list<string>& exampleList);
void replaceItem(list<string>& exampleList);
 
int main() {
    string input;
 
    list<string> Items;
    do {
        cout << "________________________________________________________________________________\n";
        cout << "                              LIST SIMULATOR 2016";
        cout << "\n________________________________________________________________________________";
        cout << "\n\n1. Add item\n2. Remove item.\n3. Replace items.\n4. Print list.\n5. Exit\n\n";
        cout << "Select the prefered option: ";
        cin >> input;
        if (input == "1")
            addItem(Items);
        else if (input == "2")
            removeItem(Items);
        else if (input == "3")
            replaceItem(Items);
        else if (input == "4")
            printList(Items);
        else if (input == "5")
            break;
        else {
            cout << "Invalid input!\n\n";
            system("pause");
            system("cls");
        }
    } while (true);
 
    return 0;
}
 
void addItem(list<string>& exampleList) {
    system("cls");
    cout << "\n================================================================================\n";
    cout << "                                ADDING TO LIST!";
    cout << "\n\n================================================================================\n";
    string itemName;
    cout << "\n\nEnter the name of item you want to add: ";
    cin >> itemName;
    exampleList.push_back(itemName);
    system("cls");
}
void removeItem(list<string>& exampleList) {
    system("cls");
    int count = 0;
    list<string>::iterator it;
    cout << "\n================================================================================\n";
    cout << "                              REMOVING FROM LIST!";
    cout << "\n\n================================================================================\n";
    string itemName;
    cout << "\n\nEnter the name of item you want to remove: ";
    cin >> itemName;
    cout << "\n";
    for (it = exampleList.begin(); it != exampleList.end(); it++) {
        *it;
        if (itemName == (*it)) {
            exampleList.remove(itemName);
            cout << "Item " << itemName << " was successfuly removed!\n";
            break;
        }
        else
            count++;
        if (count >= (exampleList.size())) {
            cout << "Item " << itemName << " was not found!\n";
            break;
        }
    }
    cout << "\n";
    system("pause");
    system("cls");
}
void printList(list<string>& exampleList) {
    system("cls");
    list<string>::iterator it;
    cout << "\n================================================================================\n";
    cout << "                                LIST PRINTING!";
    cout << "\n\n================================================================================\n";
    cout << "\n\n";
    for (it = exampleList.begin(); it != exampleList.end(); it++) {
        cout << *it << endl;
    }
    cout << "\n";
    system("pause");
    system("cls");
}
void replaceItem(list<string>& exampleList) {
    system("cls");
    string itemName1, itemName2; int count1, count2;
    list<string>::iterator it1 = exampleList.begin();
    list<string>::iterator it2 = exampleList.begin();
    int item1 = 0; int item2 = 0;
    cout << "\n================================================================================\n";
    cout << "                               REPLACING ITEMS!";
    cout << "\n\n================================================================================\n";
    cout << "\n\n";
    cout << "Enter the name of first item you want to replace: ";
    cin >> itemName1;
    cout << "Enter the name of second item you want to replace: ";
    cin >> itemName2;
    count1 = 0;
    for (it1; it1 != exampleList.end(); it1++) {
        *it1;
        if (itemName1 == (*it1)) {
            cout << "Item " << itemName1 << " was found!\n";
            item1 = 1;
            break;
        }
        else
            count1++;
        if (count1 >= (exampleList.size())) {
            cout << "Item " << itemName1 << " was not found!\n";
            break;
        }
    }
    count2 = 0;
    for (it2; it2 != exampleList.end(); it2++) {
        *it2;
        if (itemName2 == (*it2)) {
            cout << "Item " << itemName2 << " was found!\n";
            item2 = 1;
            break;
        }
        else
            count2++;
        if (count2 >= (exampleList.size())) {
            cout << "Item " << itemName2 << " was not found!\n";
            break;
        }
    }
    if ((item1 == 1) && (item2 == 1)) {
        cout << "Replacing!\n";
        exampleList.push_back(itemName1);
        exampleList.push_back(itemName2);
        (*it1) = exampleList.back();
        exampleList.pop_back();
        (*it2) = exampleList.back();
        exampleList.pop_back();
    }
    cout << "\n";
    system("pause");
    system("cls");
}
А так нет:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include <iostream>
#include <conio.h>
#include <list>
#include <string>
 
using namespace std;
 
void addItem(list<string>& exampleList);
void printList(list<string>& exampleList);
void removeItem(list<string>& exampleList);
void replaceItem(list<string>& exampleList);
string proccessMenu(string input, list<string>& exampleList);
 
int main() {
    string userInput;
 
    list<string> Items;
    do {
        cout << "________________________________________________________________________________\n";
        cout << "                              LIST SIMULATOR 2016";
        cout << "\n________________________________________________________________________________";
        cout << "\n\n1. Add item\n2. Remove item.\n3. Replace items.\n4. Print list.\n5. Exit\n\n";
        cout << "Select the prefered option: ";
        cin >> userInput;
        proccessMenu(userInput, Items);
        if (proccessMenu(userInput, Items) == "5")
            break;
    } while (true);
 
    return 0;
}
 
void addItem(list<string>& exampleList) {
    system("cls");
    cout << "\n================================================================================\n";
    cout << "                                ADDING TO LIST!";
    cout << "\n\n================================================================================\n";
    string itemName;
    cout << "\n\nEnter the name of item you want to add: ";
    cin >> itemName;
    exampleList.push_back(itemName);
    system("cls");
}
void removeItem(list<string>& exampleList) {
    system("cls");
    int count = 0;
    list<string>::iterator it;
    cout << "\n================================================================================\n";
    cout << "                              REMOVING FROM LIST!";
    cout << "\n\n================================================================================\n";
    string itemName;
    cout << "\n\nEnter the name of item you want to remove: ";
    cin >> itemName;
    cout << "\n";
    for (it = exampleList.begin(); it != exampleList.end(); it++) {
        *it;
        if (itemName == (*it)) {
            exampleList.remove(itemName);
            cout << "Item " << itemName << " was successfuly removed!\n";
            break;
        }
        else
            count++;
        if (count >= (exampleList.size())) {
            cout << "Item " << itemName << " was not found!\n";
            break;
        }
    }
    cout << "\n";
    system("pause");
    system("cls");
}
void printList(list<string>& exampleList) {
    system("cls");
    list<string>::iterator it;
    cout << "\n================================================================================\n";
    cout << "                                LIST PRINTING!";
    cout << "\n\n================================================================================\n";
    cout << "\n\n";
    for (it = exampleList.begin(); it != exampleList.end(); it++) {
        cout << *it << endl;
    }
    cout << "\n";
    system("pause");
    system("cls");
}
void replaceItem(list<string>& exampleList) {
    system("cls");
    string itemName1, itemName2; int count1, count2;
    list<string>::iterator it1 = exampleList.begin();
    list<string>::iterator it2 = exampleList.begin();
    int item1 = 0; int item2 = 0;
    cout << "\n================================================================================\n";
    cout << "                               REPLACING ITEMS!";
    cout << "\n\n================================================================================\n";
    cout << "\n\n";
    cout << "Enter the name of first item you want to replace: ";
    cin >> itemName1;
    cout << "Enter the name of second item you want to replace: ";
    cin >> itemName2;
    count1 = 0;
    for (it1; it1 != exampleList.end(); it1++) {
        *it1;
        if (itemName1 == (*it1)) {
            cout << "Item " << itemName1 << " was found!\n";
            item1 = 1;
            break;
        }
        else
            count1++;
        if (count1 >= (exampleList.size())) {
            cout << "Item " << itemName1 << " was not found!\n";
            break;
        }
    }
    count2 = 0;
    for (it2; it2 != exampleList.end(); it2++) {
        *it2;
        if (itemName2 == (*it2)) {
            cout << "Item " << itemName2 << " was found!\n";
            item2 = 1;
            break;
        }
        else
            count2++;
        if (count2 >= (exampleList.size())) {
            cout << "Item " << itemName2 << " was not found!\n";
            break;
        }
    }
    if ((item1 == 1) && (item2 == 1)) {
        cout << "Replacing!\n";
        exampleList.push_back(itemName1);
        exampleList.push_back(itemName2);
        (*it1) = exampleList.back();
        exampleList.pop_back();
        (*it2) = exampleList.back();
        exampleList.pop_back();
    }
    cout << "\n";
    system("pause");
    system("cls");
}
string proccessMenu(string input, list<string>& exampleList) {
    if (input == "1")
        addItem(exampleList);
    else if (input == "2")
        removeItem(exampleList);
    else if (input == "3")
        replaceItem(exampleList);
    else if (input == "4")
        printList(exampleList);
    else if (input == "5")
        return input;
    else {
        cout << "Invalid input!\n\n";
        system("pause");
        system("cls");
    }
    return 0;
}
Я ужасно с этими указателями обращаюсь, потому что их толком еще не изучал. Поэтому понять, почему вот такая ошибка не могу, помогите пожалуйста:
Миниатюры
Invalid null pointer  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2016, 11:00     Invalid null pointer
Посмотрите здесь:

C++ Null pointer assignment
C++ Null pointer assignment.
string, invalid null pointer C++
Invalid pointer addition C++
invalid pointer operation C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Valera_
 Аватар для _Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
03.01.2016, 15:07     Invalid null pointer #2
http://www.cyberforum.ru/cpp-beginne...ad1262479.html

Цитата Сообщение от meJevin Посмотреть сообщение
Так она работает:
Цитата Сообщение от meJevin Посмотреть сообщение
А так нет:
ты показал 150 строк кода а изменил где то наверно одну строчку, укажи в каких строчках ошибка выдели их как то...
meJevin
 Аватар для meJevin
153 / 145 / 56
Регистрация: 18.11.2015
Сообщений: 600
Завершенные тесты: 1
03.01.2016, 17:59  [ТС]     Invalid null pointer #3
Цитата Сообщение от _Valera_ Посмотреть сообщение
одну строчку
В работающем экземпляре в int main() есть обработка ввода данных от пользователя. В неработающем - я заменил эту обработку на функцию. Вот так:
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
int main() {
    string input;
 
    list<string> Items;
    do {
        cout << "________________________________________________________________________________\n";
        cout << "                              LIST SIMULATOR 2016";
        cout << "\n________________________________________________________________________________";
        cout << "\n\n1. Add item\n2. Remove item.\n3. Replace items.\n4. Print list.\n5. Exit\n\n";
        cout << "Select the prefered option: ";
        cin >> input;
        if (input == "1")
            addItem(Items);
        else if (input == "2")
            removeItem(Items);
        else if (input == "3")
            replaceItem(Items);
        else if (input == "4")
            printList(Items);
        else if (input == "5")
            break;
        else {
            cout << "Invalid input!\n\n";
            system("pause");
            system("cls");
        }
    } while (true);
 
    return 0;
}
На это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nt main() {
    string userInput;
 
    list<string> Items;
    do {
        cout << "________________________________________________________________________________\n";
        cout << "                              LIST SIMULATOR 2016";
        cout << "\n________________________________________________________________________________";
        cout << "\n\n1. Add item\n2. Remove item.\n3. Replace items.\n4. Print list.\n5. Exit\n\n";
        cout << "Select the prefered option: ";
        cin >> userInput;
        proccessMenu(userInput, Items);
        if (proccessMenu(userInput, Items) == "5")
            break;
    } while (true);
 
    return 0;
}
И вот функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string proccessMenu(string input, list<string>& exampleList) {
    if (input == "1")
        addItem(exampleList);
    else if (input == "2")
        removeItem(exampleList);
    else if (input == "3")
        replaceItem(exampleList);
    else if (input == "4")
        printList(exampleList);
    else if (input == "5")
        return input;
    else {
        cout << "Invalid input!\n\n";
        system("pause");
        system("cls");
    }
    return 0;
}
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 549
Завершенные тесты: 1
03.01.2016, 19:10     Invalid null pointer #4
А зачем string, если там 1 символ?
Поставь char
Yandex
Объявления
03.01.2016, 19:10     Invalid null pointer
Ответ Создать тему
Опции темы

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