|
4 / 4 / 0
Регистрация: 21.04.2012
Сообщений: 132
|
|||||||||||
Проход по элементам коллекции и ошибка "Индекс находился за пределами диапазона"28.11.2012, 19:11. Показов 2473. Ответов 12
Метки нет (Все метки)
День добрый,
у меня тут достаточно загадочная ситуация. нужна помощь. есть цикл, при помощи которого я прохожу по всем элементам коллекции, от 0-ого элемента до последнего. в коллекции 20 элементов. сам массив заполняется в другом методе. проблема в том, что периодически вылезает ошибка Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index я сделал вывод в текстовый файл, того, что у меня происходит и видно, что на лог останавливается на последнем элементе. и далее соответственно вылезает ошибка. лог: Кликните здесь для просмотра всего текста
tick_points.Count, индекс цикла (), X, Y, диаметр
20 0, 107 ,14285 ,6 20 1, 117 ,14305 ,6 20 2, 127 ,14305 ,6 20 3, 137 ,14285 ,6 20 4, 147 ,14285 ,6 20 5, 157 ,14285 ,6 20 6, 167 ,14325 ,6 20 7, 177 ,14305 ,6 20 8, 187 ,14285 ,6 20 9, 197 ,14305 ,6 20 10, 207 ,14305 ,6 20 11, 217 ,14305 ,6 20 12, 227 ,14305 ,6 20 13, 237 ,14305 ,6 20 14, 242 ,14300 ,16 20 15, 257 ,14305 ,6 20 16, 267 ,14285 ,6 20 17, 277 ,14305 ,6 20 18, 287 ,14305 ,6 20 19, 297 ,14305 ,6 20 0, 107 ,14305 ,6 20 1, 117 ,14305 ,6 20 2, 127 ,14285 ,6 20 3, 137 ,14285 ,6 20 4, 147 ,14285 ,6 20 5, 157 ,14325 ,6 20 6, 167 ,14305 ,6 20 7, 177 ,14285 ,6 20 8, 187 ,14305 ,6 20 9, 197 ,14305 ,6 20 10, 207 ,14305 ,6 20 11, 217 ,14305 ,6 20 12, 227 ,14305 ,6 20 13, 232 ,14300 ,16 20 14, 247 ,14305 ,6 20 15, 257 ,14285 ,6 20 16, 267 ,14305 ,6 20 17, 277 ,14305 ,6 20 18, 287 ,14305 ,6 видно, что до последнего элемента под индексом 19 - цикл не дошел, вылезла ошибка. загадка в том, что ошибка вылезает даже если проверять элемент на равенство нулю! о как.
0
|
|||||||||||
| 28.11.2012, 19:11 | |
|
Ответы с готовыми решениями:
12
Ошибка - Индекс за пределами диапазона
Индекс за пределами диапазона. Ошибка |
|
1 / 1 / 1
Регистрация: 25.11.2012
Сообщений: 9
|
||||||
| 28.11.2012, 19:19 | ||||||
|
Тут проблема не в том что вы обращаетесь к неинициализированному элементу массива, а в том что вы вылазиете за пределы массива
Проверить можно так
0
|
||||||
|
33 / 31 / 7
Регистрация: 16.08.2012
Сообщений: 126
|
||||||
| 28.11.2012, 19:24 | ||||||
|
Зачем поверять, можно просто не вылазить за пределы
0
|
||||||
|
4 / 4 / 0
Регистрация: 21.04.2012
Сообщений: 132
|
|
| 28.11.2012, 23:29 [ТС] | |
|
вы меня не совсем поняли. мне не нужно обрезать количество проходов по массиву. в нем 20 элементов, вот все их и нужно перебирать. просто в какой то момент получается, что коллекция - становится меньше на один элемент. я пока не разобрался еще с этим. тоесть как то нужно прикрутить проверку на то инициализированный элемент или нет.
0
|
|
|
1 / 1 / 1
Регистрация: 25.11.2012
Сообщений: 9
|
|
| 29.11.2012, 07:57 | |
|
Как раз таки тот код что я привел проверяет находится ли z в массиве. Непонятно только почему массив становится меньше
0
|
|
|
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
|
||||||
| 29.11.2012, 10:29 | ||||||
|
slinger если ты не меняешь коллекцию в цикле она может измениться только из другого потока.
попробуй обратный проход, чисто ради интереса:
0
|
||||||
|
4 / 4 / 0
Регистрация: 21.04.2012
Сообщений: 132
|
|
| 29.11.2012, 13:41 [ТС] | |
|
да так и есть, размер коллекции может измениться и это как раз происходит из другого потока. происходит это крайне редко. обратный проход не поможет ибо цикл может начаться по одному количеству элементов, а в процессе обхода - оно опять изменится.
нужно как то проверять последний элемент на то, инициализирован он или нет. вот в чем вопрос
0
|
|
|
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
|
|
| 29.11.2012, 14:32 | |
|
хм...из другого потока??? и ты это так спокойно сообщаешь только в 3-ем своем сообщении, и то только после моей наводки?
используй средства синхронизации. lock (tick_points) например, при всех обращениях к коллекции.
0
|
|
|
4 / 4 / 0
Регистрация: 21.04.2012
Сообщений: 132
|
|
| 29.11.2012, 14:50 [ТС] | |
|
там у меня сложный алгоритм. я просто сам только заметил, что периодически другой поток меняет длину коллекции. по поводу lock не уверен. единственный вариант - не запускать цикл for, пока происходит изменение размера коллекции. и тогда lock надо будет ставить на тот участок, где и происходит изменение. чую - зависнит все к чертям тогда..
0
|
|
|
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
|
|
| 29.11.2012, 15:07 | |
|
slinger, если цикл будет в локе, он и не запустится, пока другой lock не отпустит коллекцию.
сделай тело цикла минимальным по времени выполнения, и блокируй.
0
|
|
|
4 / 4 / 0
Регистрация: 21.04.2012
Сообщений: 132
|
|
| 29.11.2012, 15:11 [ТС] | |
|
тоесть блокировать и цикл и то место, в котором меняется размер коллекции?
0
|
|
|
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
|
||
| 29.11.2012, 16:27 | ||
|
но стараться делать код внутри локов наиболее быстро выполняющимся.
0
|
||
|
4 / 4 / 0
Регистрация: 21.04.2012
Сообщений: 132
|
||||||
| 29.11.2012, 16:41 [ТС] | ||||||
|
вопрос по lock: если лок будет установлен на код, который должен добавить элемент в коллекцию, вот пример
0
|
||||||
| 29.11.2012, 16:41 | |
|
Помогаю со студенческими работами здесь
13
График функции и ошибка: Индекс за пределами диапазона Индекс за пределами диапазона. Что за новая чудо-ошибка? Ошибка при записи в ListBox (Индекс за пределами диапазона) Ошибка при умножении матриц, индекс за пределами диапазона
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|