Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как так может быть?  (Прочитано 7712 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Prokl
Участник

ru
Offline Offline

« : 15-05-2011 12:22 » 

Код:
void __fastcall TForm1::ScrollBar2Scroll(TObject *Sender,
      TScrollCode ScrollCode, int &ScrollPos)
{
d =ScrollBar2->Position;

if (d < y1 || d > y2)
  {
  y1 = d - a/2;
  y2 = d + a/2;
  Label8->Caption = d;
    for (int ic = 0; ic <= a; ic++)
    {
    for (int ib = 0; ib <= a; ib++)
       {
       massiv[ic][ib] = 0;
       }
    }

  Label5->Caption = d;
  zagruz();
  }

Nachalo();
}

вот фрагмент кода, проблема заключается в том, что переменная d становится равной нулю после обнуления элементов массива. Label8 показывает правильно, а Label5 показывает ноль - почему?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 15-05-2011 12:26 » 

Выход индекса за пределы массива. Если размерность массива "a", то цикл от 0 до a-1.
Заполнение массива нулями лучше делать через memset().

Код:
  memset((void*)massiv, 0, sizeof(massiv));
« Последнее редактирование: 15-05-2011 12:29 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Prokl
Участник

ru
Offline Offline

« Ответ #2 : 15-05-2011 12:34 » 

почему тогда ошибку не выдало, и что же произошло, обнуляется первая переменная которая попалась после массива?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 15-05-2011 12:36 » 

Какую ошибку ты ожидал увидеть?

Обнулилось (a + 1) * (a + 1) * sizeof(massiv[0][0]) байт. Т.е. обнулено (2 *a + 1) "лишних" элементов.
« Последнее редактирование: 15-05-2011 12:38 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Prokl
Участник

ru
Offline Offline

« Ответ #4 : 15-05-2011 12:44 » 

Спасибо большое, за разъяснение.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines