Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2012, 14:16   #11
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Hejerdal, спасибо за совет, я поразвлекался с дебаггером и вот что увидел:

TetroMapX и TetroMapY везде всему соответствуют, с ними все ок.

В функции, где происходит инициализация моего массива TetroMap, указатель TetroMap указывает на 0xa07a78.

В функции, где объявляется TetroArray:

unsigned char* TetroArray;

Затем, когда происходит инициализация с помощью геттера (который возвращает тот самый TetroMap):

TetroArray = Tetro->GetArray ( );

TetroArray указывает на адрес 0xbaadf00d, который out of bound.

Вот геттер:
Код:
unsigned char*  CTTetromino::GetArray ( ) const
{
	return TetroMap;
}
Вот передача объекта в функцию:
Код:
void CTGlass::PutTetroInTheGlass ( CTTetromino* Tetro )
Вот в этой функции объявление и инициализация TetroArray:
Код:
	unsigned char* TetroArray;

	TetroArray = Tetro->GetArray ( );

Что не так? Я совершенно не врубаюсь...
mmx358 вне форума Ответить с цитированием
Старый 18.07.2012, 15:09   #12
Hejerdal
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 14
По умолчанию

Приведите код создания объекта и передачи указателя на него в функцию второго класса
Hejerdal вне форума Ответить с цитированием
Старый 18.07.2012, 17:30   #13
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Код:
void CApp::OnLoop ( )
{
    Tetromino = new CTTetromino ( Fig_I, ( *CTable )[ColorDodgerBlue], Position_ONE, 3, 3 );

    GlassObject->PutTetroInTheGlass ( Tetromino );

	Glass = NULL;

	Glass = GlassObject->GetArray ( );

    delete Tetromino;
}
mmx358 вне форума Ответить с цитированием
Старый 19.07.2012, 09:02   #14
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
unsigned char* TetroMap;
Где находиться переменная? Надеюсь не локально в конструкторе? Бывает и такое по недосмотру объявлено и в теле класса и в теле конструктора.
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 19.07.2012 в 09:09.
Krok27 вне форума Ответить с цитированием
Старый 19.07.2012, 10:13   #15
Hejerdal
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Код:
unsigned char* TetroMap;
Где находиться переменная? Надеюсь не локально в конструкторе? Бывает и такое по недосмотру объявлено и в теле класса и в теле конструктора.
Точно! Это наверняка оно.
Hejerdal вне форума Ответить с цитированием
Старый 19.07.2012, 11:25   #16
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Действительно, локально в конструкторе, ну я и лох...

Но ведь... почему тогда при вызове геттера компилятор не сообщает об ошибке? Ведь переменная уже должна быть "мертва"?

О, разобрался, почему. В декларации класса я так же объявил указатель с тем же именем, что и в конструкторе.

Последний раз редактировалось mmx358; 19.07.2012 в 11:31.
mmx358 вне форума Ответить с цитированием
Старый 19.07.2012, 11:31   #17
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Спасибо большое за помощь!!!
mmx358 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Линейные списки. Ошибка сегментации при добавлении элемента. litviak Общие вопросы C/C++ 10 30.10.2011 23:48
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Работа с указателями. Ошибка сегментации. agronomchek Помощь студентам 1 24.08.2010 14:51
Ошибка сегментации при вызове system("PAUSE") Lavisa Общие вопросы C/C++ 9 01.08.2009 18:14
Ошибка сегментации при вызове system("PAUSE") Lavisa Помощь студентам 0 29.07.2009 17:43