Разработчикам. Ошибка 4002 при работе функции ArrayInitialize. Блуждающие токи или что это такое?

 
Вдруг откуда ни возьмись, при работе в тестере стала появляться ошибка 4002. Читаем матчасть
ERR_ARRAY_INDEX_OUT_OF_RANGE 4002 Индекс массива - вне диапазона

После паручасовых исследований и упрощений выявил очень интересный феномен работы тестера:

- на появление ошибки при инициализации массива А (функция а)влияет работа массива B(в функции в);

- причем, если функции а и в поменять местами, то ошибка со второго тика;

2008.08.25 03:50:02 2007.01.04 01:19 TEST_ArrayInialize GBPUSD,H1: ArrayInitialize(A,0.0) = 4002 Количество инициализированных элементов = 10
2008.08.25 03:50:02 2007.01.04 01:16 TEST_ArrayInialize GBPUSD,H1: ArrayInitialize(A,0.0) = 4002 Количество инициализированных элементов = 10
2008.08.25 03:50:02 2007.01.04 01:16 TEST_ArrayInialize GBPUSD,H1: ArrayInitialize(A,0.0) = 4002 Количество инициализированных элементов = 10
2008.08.25 03:49:57 2007.01.04 00:00 TEST_ArrayInialize GBPUSD,H1: ArrayInitialize(A,0.0) = 0 Количество инициализированных элементов = 10
2008.08.25 03:49:57 TEST_ArrayInialize started for testing

- причем, если в функции в добавить еще переменную(функция с), оставив логику работы прежней, то ошибка пропадает.

////////////////
double A[10];
double B[10];
///////////////
void start() //
{
   a(A);
   b(B);
//   c(B);
   return;
}
///////////////////////////
void a(double& arr[])   //
{
   int tmp=ArrayInitialize(arr,0.0);//
   int err=GetLastError();
   Print("ArrayInitialize(A,0.0) = ",err,"   Количество инициализированных элементов = ",tmp);
}
////////////////////
///////////////////////////
void b(double& arr[])      //
/////////////////////////
{
   for(int i=10;i>0;i--)
      arr[i]=arr[i-1];
   return;
}
/////////////////
///////////////////////////
void c(double& arr[])      //
/////////////////////////
{
   for(int i=10;i>0;i--)
   {
      double c=arr[i-1];
      arr[i]=c;
   }
   return;
}
/////////////////

Можно предположить, что работа функции в не совсем корректна(хотя работает исправно), но не должна в принципе, по-хорошему одна функция влиять на результаты работы другой!

Может где и ошибаюсь, но решил сообщить. Возможно разработчикам пригодится, а кто-нибудь, возможно, сэкономит время и нерв.

 
VBAG писал (а) >>
Вдруг откуда ни возьмись, при работе в тестере стала появляться ошибка 4002. Читаем матчасть
ERR_ARRAY_INDEX_OUT_OF_RANGE4002Индекс массива - вне диапазона
. . .

Предполагаю, что проблема в следующем.


Вы объявляете массив из десяти элементов

double A[10]
double B[10]

Затем внутри функции b() обращаетесь к индексу [10], хотя при заданном размере массива индексация должна производится от 0 до 9.

При доступе за пределы массива исполняющая подсистема генерирует ошибку ERR_ARRAY_INDEX_OUT_OF_RANGE (4002).


Функция  GetLastError()  запоминает код последней ошибки в Вашем случае это - 4002.


При вызове GetLastError() внутри функции a() возвращается не ошибка выполнения функции ArrayInitialize(),

а код ошибки, который сохранился при попытке обратиться за пределы массива внутри функции b().



 
Ilnur писал (а) >>

Предполагаю, что проблема в следующем.



Именно, шулай.

 
Ай да, спасибочки, люди добрые! Шайтан попутал. На ровном месте, что называется - ... и упал.
 
Спасибо. Юзал те же грабли, теперь понял.
Причина обращения: