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

Debug error в коде - C++

Восстановить пароль Регистрация
 
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
19.07.2013, 14:33     Debug error в коде #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
/* gamers.h */
#include <string>
class gamers
{
public:
    gamers() // Конструктор
    {
        nickname = "Null";
        name = "Null";
        password = "nopass";
        money = 0;
    }
    void name_of_gamer(std::string nameformal)// Изменить имя
    {
        name = nameformal;
    }
    std::string get_name_gamer() // ПОлучить имя(2)
    {
        return name;
    }
    void nickname_of_gamer(std::string nicknameformal) // Аналогично
    {
        nickname = nicknameformal;
    }
    void password_of_gamer(std::string passwordformal)// Аналогично
    {
        password = passwordformal;
    }
    std::string get_password_of_gamer() // Аналогично(2)
    {
        return password;
    }
    std::string get_nickname_of_gamer()// Аналогично(2)
    {
        return nickname;
    }
    void change_ballans_plus(int moneyformal) // Изменение баланса в плюс (Не обращать внимания)
    {
        int tmpmoney = get_ballans();
        tmpmoney = tmpmoney + moneyformal;
        money = tmpmoney;
    }
    void change_ballans_minus(int moneyformal) // В минус (неважно)
    {
        int tmpmoney = get_ballans();
        tmpmoney = tmpmoney - moneyformal;
        money = tmpmoney;
    }
    int get_ballans() // Получить баланс
    {
        return money;
    }
private: // Свойства
    std::string name;
    std::string nickname;
    std::string password;
    int money;
};
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
#include <iostream>
#include <string>
#include "gamers.h"
int *numgamers = new int(0);
gamers *arr = new gamers[*numgamers];
void main_menureg() // Меню для зареганных
{
    std::cout << "Меню пользователя:\n 1 - Сменить ник\n 2 - Сменить имя\n 3 - проверить баланс\n 4 - перевести другому игроку\n  Ваш выбор: ";
    int user_change;
    std::cin >> user_change;
    if (user_change == 1)
    {
        std::string new_nickname;
        std::cout << "Введите новый ник: ";
        std::cin >> new_nickname;
        arr[0].nickname_of_gamer(new_nickname);
        std::cout << "Новый ник: " << new_nickname << std::endl;
    }
    if (user_change == 2)
    {
        std::string new_name;
        std::cout << "Введите новое имя: ";
        //getline(std::cin,new_name);
        std::cin >> new_name;
        arr[0].name_of_gamer(new_name);
        std::cout << "Новое имя: " << new_name << std::endl;
    }
    if (user_change == 3)
    {
        int mybalance;
        mybalance = arr[0].get_ballans();
        std::cout << "На вашем счету: " << mybalance << " очков" << std::endl;
    }
    if (user_change == 4)
    {
        std::cout << "В разработке";
    }
    if (user_change < 1 || user_change > 4) { main_menureg(); }
}
 
 
void new_gamer() // Создание нового объекта (регистрация)
{
    *numgamers = *numgamers + 1;
    std::cout << "Новый игрок успешно создан!" << std::endl;
}
void login() //Вход под логином !!! В этой функции, после ввода логина и пароля - вылетает !!!
{
    std::string *golog = new std::string; // User вводит ник
    std::cin >> *golog;
    std::string *gopass = new std::string; // и пароль
    std::cin >> *gopass;
    for (int i = 0; i < *numgamers; i++) // Далее в цикле проверяются все созданные объекты и прога пытается найти тот объект, который удовлетоворяет
    {
        if (arr[i].get_nickname_of_gamer() == *golog && arr[i].get_password_of_gamer() == *gopass)
        {
            std::cout << "Вход выполнен........"; // Если нашла, то написала это.
        }
    }
}
void main_menunoreg() // Меню для не зареганных
{
    std::cout << "Главное меню:\n 1- Регистрация\n 2 - Войти под своим логином\n  Выбор: ";
    int user_change;
    std::cin >> user_change;
    if (user_change == 1) { new_gamer(); main_menunoreg(); }
    else if (user_change == 2) {login(); }
    else if (user_change < 1 || user_change > 2) { main_menunoreg(); }
}
 
int main()
{
    setlocale(0, "");
    //new_gamer();
    main_menunoreg(); // Начало.
}
Debug error в коде
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
19.07.2013, 14:35     Debug error в коде #2
Цитата Сообщение от M1ronz0r Посмотреть сообщение
int *numgamers = new int(0);
gamers *arr = new gamers[*numgamers];
Массив из 0 элементов.
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
19.07.2013, 14:46  [ТС]     Debug error в коде #3
C++
1
int *numgamers = new int(0);
- это размер массива
C++
1
gamers *arr = new gamers[*numgamers];
- массив объектов
в new_gamer() - переменная Numgamers увеличивается на 1 всегда
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
19.07.2013, 14:47     Debug error в коде #4
Цитата Сообщение от M1ronz0r Посмотреть сообщение
в new_gamer() - переменная Numgamers увеличивается на 1 всегда
Ага. А память выделяется всего один раз.
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
19.07.2013, 14:49  [ТС]     Debug error в коде #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Ага. А память выделяется всего один раз.
как исправить? У меня с памятью проблемы xD
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
19.07.2013, 14:51     Debug error в коде #6
1. Отказаться от глобальных переменных.
2. Использовать std::vector, либо свой самописный динамический массив.

Не по теме:

3. Не выделять память под int с использованием new.

M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
19.07.2013, 15:00  [ТС]     Debug error в коде #7
Цитата Сообщение от 0x10 Посмотреть сообщение
1. Отказаться от глобальных переменных.
2. Использовать std::vector, либо свой самописный динамический массив.

Не по теме:

3. Не выделять память под int с использованием new.

Я что-то понять тогда не могу, где создавать этот массив и его размер.

Не по теме:

3. Не выделять память под int с использованием new.

- программа не могла тогда обратиться к этой переменной (numgamers), если бы не создание через new
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
19.07.2013, 15:11     Debug error в коде #8
Да вот я думаю: забивать голову или не забивать...
Создать можешь в любой функции, а для изменения - передавать по ссылке в другие функции, например.
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
19.07.2013, 15:20  [ТС]     Debug error в коде #9
Цитата Сообщение от 0x10 Посмотреть сообщение
Да вот я думаю: забивать голову или не забивать...
Создать можешь в любой функции, а для изменения - передавать по ссылке в другие функции, например.
Можно шаблон ссылки?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2013, 15:24     Debug error в коде
Еще ссылки по теме:

C++ Debug Error! R6010 - abort() has been called
fatal error LNK1168: не удается открыть F:\Interp\Debug\Interp.exe для записи C++
С++ Debug Error!( C++

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

Или воспользуйтесь поиском по форуму:
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
19.07.2013, 15:24     Debug error в коде #10
C++
1
2
3
4
5
6
7
8
typedef std::vector<Gamer> GamerContainer;
 
void AppendNewGamer(GamerContainer& gamers)
{
    Gamer tmp;
    // ...
    gamers.push_back(tmp);
}

Не по теме:

На самом деле, все не так и я бы сделал по-другому, но городить контексты, какой-нибудь еще GamerManager желания нет. И уж тем более не стоит забивать этим голову пока возникают вопросы о ссылках.

Yandex
Объявления
19.07.2013, 15:24     Debug error в коде
Ответ Создать тему
Опции темы

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