| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Индекс массива превышает границу |
| Автор: greykardinal 5.2.2010, 09:11 | ||
Следующий код:
На что мне идет ругань "VARIANT ARRAY INDEX OUT OF BOUNDS". Не могу понять в чем дело - величина MaxI раняется 1600. Помогите!!! |
| Автор: zim22 5.2.2010, 09:43 |
в какой строчке ругань? индексация у массивов начинается с нуля. |
| Автор: greykardinal 5.2.2010, 09:57 | ||
| 2 zim22: Ругань в строке
Как я думаю, число элементов массива Ent_Massiv и диапазона Range должно быть одинаковым - по 1600. Так и есть. Ничего в голову не лезет((( |
| Автор: xvr 5.2.2010, 12:24 |
| Зачем в 13й строке создается массив, который тут же (в 16й строке) перезаписывается (при этом оригинальный массив теряется)? Почему в 20й строке идет перебор до 1600, а не до размера массива, который тем не менее прочли в предыдущей строке (в переменную MaxI) ? |
| Автор: greykardinal 5.2.2010, 13:01 | ||
| Не получается. Ошибка возникает при i=0. Возникает, даже если перебор вести до 2.
Даже если сделать так, вылетает "VARIANT ARRAY INDEX OUT OF BOUNDS". Ума не приложу , что за хрень |
| Автор: xvr 5.2.2010, 13:27 |
| Может он вообще не массив возвращает? А например коллекцию. Посмотри в отладчике, что лежит в DataArray, сдается мне, что там VT_DISPATCH |
| Автор: greykardinal 5.2.2010, 13:43 | ||
| 2 XVR: А что именно смотреть - Debug показывает там кучу полей. я их не понимаю, увы. Но вроде как при
некоторым полям присваивается адрес какой-то ячейки. |
| Автор: xvr 5.2.2010, 14:38 | ||||||
Поле vt. Там должно быть VT_SAFEARRAY (число 27)
|
| Автор: greykardinal 5.2.2010, 15:56 | ||
Инспектор в поле vt показывает 8204. Это происходит в момент
До этого в поле был 0. Не понимаю, что это значит. |
| Автор: xvr 5.2.2010, 16:16 | ||||||
Это значит VT_ARRAY|VT_VARIANT, т.е. массив вариантов. VarArrayCreate создает SafeArray и прописывает его в VARIANT как простой массив, а не как SafeArray
Интересно, что там будет после DataArray=Range.OlePropertyGet("Value"); |
| Автор: greykardinal 5.2.2010, 16:29 | ||
Тоже самое - инспектор показывает 8204. Можете подсказать, как это исправить |
| Автор: xvr 5.2.2010, 17:15 | ||||
Тогда должно работать Чему равен MaxI? |
| Автор: greykardinal 5.2.2010, 17:19 |
| MaxI равняется 1600. |
| Автор: xvr 5.2.2010, 20:49 | ||
Увы, тогда только вооружаться дебагером и нырять во внутренности GetElement |