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

Не инициализированные указатели - C++

Восстановить пароль Регистрация
 
Rainy
2 / 2 / 0
Регистрация: 08.03.2014
Сообщений: 31
28.05.2014, 11:04     Не инициализированные указатели #1
Добрый день, пишу небольшую игру на движке, появилась проблема

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include “mainClass.h”
int main()
{
bool endless = true;
mainClass mainObject;
mainObject.initialize();
while(endless)
{   
    mainObject.run();
}
return 0;
}


mainClass.h
Кликните здесь для просмотра всего текста
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
#inlcude  “Enums.h”
#include “secondClass.h”
class mainClass
{
public:
mainClass() // конструктор
{
}
void Initialize()
{   
        secondObject = new secondClass[MAX] //MAX – это константа объявленная в enums.h
}
void run()
{
    for(int i = 0; i < MAX; i++)
        {
          secondObject[i].firstMetod();
        }
        …
       for(int i = 0; i < MAX; i++)
       {
          secondObject[i].secondMetod(); // ругается на этот метод
       }
}
private:
    secondClass* secondObject;
}


secondClass.h
Кликните здесь для просмотра всего текста
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
#include “Enums.h”
 
class secondClass
{
public:
secondClass() //конструктор
{
}
void firstMetod()
{
    speed = 10;
        speedPtr = &speed;
    health = 15;
        healthPtr = &health;
}
void secondMetod()
{
if(*speedPtr < 15) //конкретно ругается вот здесь, если закоментить это условие
{
    …
}
if(*healthPtr < 20) // то ошибка вылетит здесь
{
    …
}
}
private:
    int speed;
        int* speedPtr;
    int health;
        int* healthPtr;
}


Все это сильно упрощенная версия моего кода, ошибка вылетает когда доходит до проверки указателей. Ругается на ошибку доступа, я своими методами проверил эти указатели, и выяснил, что они хранят значение -8................ Т.е рандомное число
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 11:04     Не инициализированные указатели
Посмотрите здесь:

C++ указатели
Указатели C++
Указатели C++
указатели C++
C++ указатели
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
28.05.2014, 11:11     Не инициализированные указатели #2
1. Проверь отладчиком, как срабатывает firstMethod().
2. Зачем тут вообще указатели? Используй speed и health напрямую.
Rainy
2 / 2 / 0
Регистрация: 08.03.2014
Сообщений: 31
28.05.2014, 12:15  [ТС]     Не инициализированные указатели #3
указатели нужны(это очень упрощенная версия кода)

Добавлено через 2 минуты
а что значить проверить как работает метод? Я проверял инициализацию переменных, они инициализируются
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.05.2014, 12:28     Не инициализированные указатели #4
поставь брейкпойнт в конце first method и в начале second method
Rainy
2 / 2 / 0
Регистрация: 08.03.2014
Сообщений: 31
28.05.2014, 12:45  [ТС]     Не инициализированные указатели #5
firstMetod обходит, первый срабатывает secondMetod, но в нем стоит if(isBuilt == true), а isBuilt = true в конце метода firstMetod, а изначально isBuilt = false. По идее secondMetod должен обойтись, т к не проходит условие

Добавлено через 7 минут
переменные speed и health инициализируются только для последнего элемента массива secondObject, буду дальше думать
Yandex
Объявления
28.05.2014, 12:45     Не инициализированные указатели
Ответ Создать тему
Опции темы

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