Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема в VC++ 6


Автор: Гость_Unknown 21.1.2004, 18:47
Мне нужно написать небольшую программу-диалог.
Для хранения и изменения некоторых данных я добавил в класс своего диалога нек. переменные.
При попытке изменить их программа вылетает!

Приведу фрагмент кода:
Код

unsigned int index;
for(int i = 0; i < MAX_SITES; i++)
 if(m_Sites[i].is_used == 0)
 {
  index = i;
  break;
 }
m_Sites[index].is_used = 1;


Причем если изменять строго определенный элемент массива, все работает нормально!(например: m_Sites[23].is_used = 1 )

Если кто-то сталкивался с подобным, пожалуйста, напишите!

Автор: Alex101 21.1.2004, 19:43
Так ты может в другую область памяти лезешь, ведь в C у тебя значение index после цикла будет MAX_SITES+1 (если брык не сработает)
Или дело не в этом?

Автор: Dov 21.1.2004, 19:46
Обрати внимание на эту строку:
Код
if(m_Sites[i].is_used == 0)
и подумай о том, что будет хранится в index в том случае, если твой if не сработает.

Автор: mr.DUDA 21.1.2004, 20:16
Цитата
подумай о том, что будет хранится в index в том случае, если твой if не сработает

правильно, т.е. тут действует ситуация, когда "index" так и останется непроинициализированным, а обращение по индексу идёт:
Цитата
unsigned int index; // а можно так: unsigned int index = 0xffffffff;
for(int i = 0; i < MAX_SITES; i++)
if(m_Sites[i].is_used == 0)
{
  index = i;
  break;
}

// надо добавить:
if(index != 0xffffffff)
    m_Sites[index].is_used = 1;

Автор: Alex101 21.1.2004, 20:31
Да, отвык писать на C, а точнее разбираться в коде, но идею, думаю, поняли. smile.gif
Не, надо так написать:
Код
if(index<MAX_SITES) m_Sites[index].is_used=1;

Автор: Гость_switch 22.1.2004, 16:04
У тебя плохо структурирован код:
попробуй так:

for(int i = 0; i < MAX_SITES; i++)
if(m_Sites[i].is_used == 0) {
m_Sites[i].is_used = 1;
break;
}

или так

for(int i = 0; i < MAX_SITES; i++)
if(m_Sites[i].is_used == 0) break;
m_Sites[i].is_used = 1;




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)