Ошибка «ИндСкс находится Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива» β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых распространённых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. Она Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пытаСтся ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту массива ΠΏΠΎ индСксу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π΅Π³ΠΎ фактичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. НапримСр, Ссли массив содСрТит 5 элСмСнтов (с индСксами ΠΎΡ‚ 0 Π΄ΠΎ 4), Π° ΠΊΠΎΠ΄ пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнту с индСксом 5 ΠΈΠ»ΠΈ -1.

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ошибка каТСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Π΅Ρ‘ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скрыты Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΎΡ‚ банальной ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅ Π΄ΠΎ слоТных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² с динамичСскими массивами. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ сцСнарии возникновСния ошибки, научимся Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ источник ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π±Π΅Π· послСдствий для бизнСс-процСссов.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ошибки Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ нСпрСдсказуСмо: сСгодня ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Π° Π·Π°Π²Ρ‚Ρ€Π° β€” послС обновлСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ измСнСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ β€” Π²Ρ‹Π»Π΅Ρ‚Π°Π΅Ρ‚ с критичСским сообщСниСм. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых ΠΊΠΎΠ²Π°Ρ€Π½Ρ‹Ρ… Π² арсСналС 1Π‘. Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ: послС прочтСния этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ смоТСтС Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΠΎ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ появлСниС Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

πŸ“Š Π‘ ΠΊΠ°ΠΊΠΎΠΉ частотой Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с ошибками массивов Π² 1Π‘?
Часто (СТСнСдСльно)
Иногда (СТСмСсячно)
Рядом (Ρ€Π°Π· Π² ΠΏΠΎΠ»Π³ΠΎΠ΄Π°)
Никогда
НС знаю, Ρ‡Ρ‚ΠΎ это

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ массив Π² 1Π‘ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ индСксация

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ массив Π² контСкстС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8. Массив β€” это упорядочСнная коллСкция элСмСнтов, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ осущСствляСтся ΠΏΠΎ индСксу (порядковому Π½ΠΎΠΌΠ΅Ρ€Ρƒ). Π’ 1Π‘ массивы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ:

  • πŸ“Œ БтатичСскими β€” с фиксированным количСством элСмСнтов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, массив ΠΈΠ· 10 строк).
  • πŸ“Œ ДинамичСскими β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ измСняСтся Π² процСссС выполнСния ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов).
  • πŸ“Œ Ассоциативными β€” Π³Π΄Π΅ индСксами слуТат Π½Π΅ числа, Π° строки (ΠΊΠ»ΡŽΡ‡ΠΈ).

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ массивов Π² 1Π‘ β€” нумСрация индСксов начинаСтся с 0. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли массив содСрТит 3 элСмСнта, ΠΈΡ… индСксы Π±ΡƒΠ΄ΡƒΡ‚ 0, 1 ΠΈ 2. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ индСксу 3 (ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ) Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ «ИндСкс находится Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ доступа:


// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ массив с 3 элСмСнтами

Массив = Новый Массив(3);

Массив[0] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ 1"; // ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ

Массив[1] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ 2"; // ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ

Массив[2] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ 3"; // ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ

Массив[3] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ 4"; // ΠžΠ¨Π˜Π‘ΠšΠ: индСкс 3 Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива

НапримСр:

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°()); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 2 (послСдний индСкс)

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ()); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 3 (ΠΎΠ±Ρ‰Π΅Π΅ число элСмСнтов)

πŸ’‘

ВсСгда провСряйтС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ элСмСнтам, особСнно Ссли массив формируСтся динамичСски (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π±Π°Π·Ρ‹ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π°).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ошибки «ИндСкс Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива»

Ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² Ρ‚Ρ€Ρ‘Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… сцСнариях:

  1. ΠžΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ° Π² индСксС β€” самый простой случай, ΠΊΠΎΠ³Π΄Π° программист просто ошибся ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° элСмСнта. НапримСр, вмСсто Массив[0] написал Массив[1] для массива с ΠΎΠ΄Π½ΠΈΠΌ элСмСнтом.
  2. ДинамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива β€” ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ массив содСрТит N элСмСнтов, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΈΡ… мСньшС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ удалСния элСмСнтов).
  3. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Ρ†ΠΈΠΊΠ»Π° β€” классичСская ошибка ΠΏΡ€ΠΈ использовании Для ΠΈΠ»ΠΈ Пока, ΠΊΠΎΠ³Π΄Π° счётчик Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ случай ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

1. ΠžΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ ΠΈ Β«off-by-oneΒ» ошибки

Π­Ρ‚ΠΎ самая распространённая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, особСнно Ρƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • πŸ”’ ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Массив[Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ()] вмСсто Массив[Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1].
  • πŸ”’ ИспользованиС Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() + 1 Π² Ρ†ΠΈΠΊΠ»Π΅.
  • πŸ”’ ΠŸΡƒΡ‚Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1 ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ индСксом.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

Массив = Новый Массив(2); // Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ с индСксами 0 ΠΈ 1

// Ошибка: пытаСмся ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[2]);

2. ДинамичСскиС массивы ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ измСнСния

Ошибка часто проявляСтся, ΠΊΠΎΠ³Π΄Π° массив формируСтся Π½Π° основС Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° запроса ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π°), ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ сцСнарии:

  • πŸ“Š Запрос ΠΊ Π±Π°Π·Π΅ Π²Π΅Ρ€Π½ΡƒΠ» мСньшС строк, Ρ‡Π΅ΠΌ оТидалось.
  • πŸ“Š Π€Π°ΠΉΠ» CSV содСрТит мСньшС ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π» ΠΊΠΎΠ΄.
  • πŸ“Š ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ΄Π°Π»ΠΈΠ» элСмСнты ΠΈΠ· массива Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

// ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ запрос Π²Π΅Ρ€Π½Ρ‘Ρ‚ хотя Π±Ρ‹ 1 строку

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π—Π°ΠΏΡ€ΠΎΡΠ° = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ().Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ();

ΠŸΠ΅Ρ€Π²Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π—Π°ΠΏΡ€ΠΎΡΠ°[0]; // ΠžΠ¨Π˜Π‘ΠšΠ, Ссли запрос Π²Π΅Ρ€Π½ΡƒΠ» пустой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

3. Ошибки Π² Ρ†ΠΈΠΊΠ»Π°Ρ…

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π°. НапримСр:

Для ИндСкс = 0 По Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() Π¦ΠΈΠΊΠ» // ΠžΠ¨Π˜Π‘ΠšΠ: послСдняя итСрация Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[ИндСкс]);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

Для ИндСкс = 0 По Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[ИндСкс]);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

πŸ’‘

ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 ΠΈΠ»ΠΈ Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π² Ρ†ΠΈΠΊΠ»Π°Ρ….

Как Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: пошаговая инструкция

Когда Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ сообщСниС «ИндСкс находится Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива», ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ мСстС ΠΊΠΎΠ΄Π° ΠΎΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚. Π’ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСйствий:

  1. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ трассировку стСка β€” Π² ΠΎΠΊΠ½Π΅ ошибки 1Π‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ показываСтся Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², которая ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ вас ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΌΡƒ участку ΠΊΠΎΠ΄Π°.
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива β€” ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ элСмСнту Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() ΠΈ Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°().
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ β€” ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ останова ΠΏΠ΅Ρ€Π΅Π΄ строкой с ошибкой ΠΈ пошагово Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄, отслСТивая измСнСния массива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ диагностики:

// ДобавляСм ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π Π°Π·ΠΌΠ΅Ρ€ массива: " + Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ());

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠŸΡ‹Ρ‚Π°Π΅ΠΌΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт с индСксом: " + ИндСкс);

// Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ошибка

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив[ИндСкс];

Если ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

  • πŸ“„ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π΄Π°Π½Π½Ρ‹Ρ… (запрос, Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ„Π°ΠΉΠ»).
  • πŸ“„ Π›ΠΎΠ³ΠΈΠΊΡƒ формирования массива (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π³Π΄Π΅-Ρ‚ΠΎ элСмСнты ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ).
  • πŸ“„ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пустой список пСрСдаётся ΠΊΠ°ΠΊ массив).

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ трассировку стСка|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ|ΠŸΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ останова Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅|ВывСсти ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² сообщСния|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ источник Π΄Π°Π½Π½Ρ‹Ρ… (запрос, Ρ„Π°ΠΉΠ», Ρ‚Π°Π±Π»ΠΈΡ†Π°)|Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ индСкс Π½Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ-->

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ сцСнарии ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ 1Π‘, ΠΈ способы ΠΈΡ… исправлСния.

1. Ошибка ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ запроса

Битуация: запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠ΅ количСство строк, Π° ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ().Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ();

ΠŸΠ΅Ρ€Π²Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚[0]; // Ошибка, Ссли запрос Π²Π΅Ρ€Π½ΡƒΠ» 0 строк

РСшСниС: ВсСгда провСряйтС, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ пустой:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ().Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ();

Если Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() > 0 Π’ΠΎΠ³Π΄Π°

ΠŸΠ΅Ρ€Π²Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚[0];

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Запрос Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ» Π΄Π°Π½Π½Ρ‹Ρ…!");

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

2. Ошибка Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ элСмСнтов

Битуация: Ρ†ΠΈΠΊΠ» Для Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ условия.

ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

Для i = 1 По Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[i]); // Ошибка: индСксы Π² 1Π‘ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 0!

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

РСшСниС: НачинайтС счётчик с 0 ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1:

Для i = 0 По Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[i]);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

3. Ошибка ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (CSV, Excel)

Битуация: ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» содСрТит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ количСство ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΈΡ… мСньшС.

ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

Π”Π°Π½Π½Ρ‹Π΅Π˜Π·Π€Π°ΠΉΠ»Π° = Новый Массив;

//.. Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°..

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†3 = Π”Π°Π½Π½Ρ‹Π΅Π˜Π·Π€Π°ΠΉΠ»Π°[2]; // Ошибка, Ссли Π² строкС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2 столбца

РСшСниС: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки:

Если Π”Π°Π½Π½Ρ‹Π΅Π˜Π·Π€Π°ΠΉΠ»Π°.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() > 2 Π’ΠΎΠ³Π΄Π°

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†3 = Π”Π°Π½Π½Ρ‹Π΅Π˜Π·Π€Π°ΠΉΠ»Π°[2];

Π˜Π½Π°Ρ‡Π΅

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†3 = НСопрСдСлСно;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

4. Ошибка ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов ΠΈΠ· массива

Битуация: Π² Ρ†ΠΈΠΊΠ»Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ элСмСнты массива, Π½ΠΎ счётчик Π½Π΅ коррСктируСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ пропускам ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

Для i = 0 По Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 Π¦ΠΈΠΊΠ»

Если Массив[i] = "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" Π’ΠΎΠ³Π΄Π°

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(i);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

РСшСниС: ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ массив с ΠΊΠΎΠ½Ρ†Π° ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Пока:

i = Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1;

Пока i >= 0 Цикл

Если Массив[i] = "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" Π’ΠΎΠ³Π΄Π°

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(i);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

i = i - 1;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π² прямом Ρ†ΠΈΠΊΠ»Π΅ опасно?

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнта всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ Π²Π»Π΅Π²ΠΎ, ΠΈ счётчик i Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. НапримСр, Ссли Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ элСмСнт с индСксом 2, Ρ‚ΠΎ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΠΎΠ΄ индСксом 3, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 2, Π½ΠΎ Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚ ΠΊ индСксу 3, пропустив Π΅Π³ΠΎ.

Как ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ Π±ΠΎΡ€ΡŒΠ±Ρ‹ с ошибками массивов β€” ΠΏΡ€ΠΎΡ„ΠΈΠ»Π°ΠΊΡ‚ΠΈΠΊΠ°. Π’ΠΎΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

  • πŸ›‘οΈ ВсСгда провСряйтС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ элСмСнту:
    Если ИндСкс >= 0 И ИндСкс < Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() Π’ΠΎΠ³Π΄Π°
    

    Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив[ИндСкс];

    ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

  • πŸ›‘οΈ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ бСзопасныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Найти() ΠΈΠ»ΠΈ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ошибок:
    Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(ИндСкс); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ НСопрСдСлСно, Ссли индСкс Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ
  • πŸ›‘οΈ ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Для КаТдого вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния индСксами:
    Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»
    

    Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

    ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

  • πŸ›‘οΈ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² коммСнтариях, особСнно Ссли ΠΎΠ½ зависит ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….

Для динамичСских массивов ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:

Ѐункция ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ(Массив, ИндСкс, Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠŸΠΎΠ£ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ = НСопрСдСлСно)

Если ИндСкс >= 0 И ИндСкс < Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Массив[ИндСкс];

Π˜Π½Π°Ρ‡Π΅

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠŸΠΎΠ£ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ рСкомСндация: Ссли массив формируСтся Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· внСшнСго источника (запрос, Ρ„Π°ΠΉΠ», Π²Π΅Π±-сСрвис), всСгда ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ мСньшС элСмСнтов, Ρ‡Π΅ΠΌ Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅.

РаспространённыС ΠΌΠΈΡ„Ρ‹ ΠΎΠ± ошибкС массивов

Π’ΠΎΠΊΡ€ΡƒΠ³ этой ошибки Ρ…ΠΎΠ΄ΠΈΡ‚ мноТСство Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠΉ. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ самыС популярныС:

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ «ИндСкс Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива» Π² Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² 1Π‘:Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ΠΈΠΈ ΠΈΠ»ΠΈ 1Π‘:Π—Π£ΠŸ), Π½Π΅ ΡΠΏΠ΅ΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄! Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ связано Π»ΠΈ это с ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ. ИзмСнСниС Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… обновлСниях.
ΠœΠΈΡ„ Π Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
«Ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ послСднСму элСмСнту» Ошибка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΈ любом Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ индСксС: ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ, слишком большом ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎΠΌ Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ().
«Если массив пустой, Ρ‚ΠΎ Массив[0] Π²Π΅Ρ€Π½Ρ‘Ρ‚ НСопрСдСлСно» НСт! ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ [0] Π² пустом массивС Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() > 0 для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.
«Ошибка всСгда ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΡƒ Π² ΠΊΠΎΠ΄Π΅Β» Волько Π² 30% случаСв. Π§Π°Ρ‰Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² динамичСских Π΄Π°Π½Π½Ρ‹Ρ… (запросы, Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄).
Β«ΠœΠ΅Ρ‚ΠΎΠ΄ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ() автоматичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива» Π”Π°, Π½ΠΎ Ссли Π²Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°Π΄Π°Π»ΠΈ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ создании (Новый Массив(10)), Ρ‚ΠΎ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ() Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ распространённоС Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅: «Если ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π²Ρ‡Π΅Ρ€Π°, Ρ‚ΠΎ сСгодня ошибка Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·-Π·Π° массива». На самом Π΄Π΅Π»Π΅, ошибка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ:

  • πŸ”„ ИзмСнСнии Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запрос стал Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ мСньшС строк).
  • πŸ”„ ОбновлСнии ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (измСнилась Π»ΠΎΠ³ΠΈΠΊΠ° формирования массива).
  • πŸ”„ Π‘ΠΌΠ΅Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€Π°Π² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, доступ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚).

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Если ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² слоТном ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ Ρ€Π΅Π΄ΠΊΠΎ воспроизводится, ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ диагностики:

1. Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ массива

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΊΠΎΠ΄ запись всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с массивом Π² ΠΆΡƒΡ€Π½Π°Π»:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠœΠ°ΡΡΠΈΠ²(Массив, Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅)

Π›ΠΎΠ³ = Новый ВСкст;

Π›ΠΎΠ³.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ(Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅);

Π›ΠΎΠ³.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ("Π Π°Π·ΠΌΠ΅Ρ€: " + Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ());

Π›ΠΎΠ³.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹: " + Π‘Ρ‚Ρ€ΠΎΠΊΠ°(Массив));

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠ’Π›ΠΎΠ³(Π›ΠΎΠ³); // Π’Π°ΡˆΠ° функция записи Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΆΡƒΡ€Π½Π°Π» рСгистрации

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹;

2. ИспользованиС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ (breakpoints) с условиСм. НапримСр, ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ останова, которая сработаСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° индСкс Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹:

// Π’ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ останова Π½Π° эту строку

Если ИндСкс >= Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠžΠ¨Π˜Π‘ΠšΠ: ИндСкс " + ИндСкс + " Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ " + Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ());

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

3. ВСстированиС Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… случаСв

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ тСсты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° с:

  • πŸ§ͺ ΠŸΡƒΡΡ‚Ρ‹ΠΌ массивом.
  • πŸ§ͺ Массивом с 1 элСмСнтом.
  • πŸ§ͺ Массивом, Π³Π΄Π΅ элСмСнты ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
  • πŸ§ͺ ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ индСксами (Ссли Π»ΠΎΠ³ΠΈΠΊΠ° это прСдусматриваСт).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ тСста:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π’Π΅ΡΡ‚ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΠœΠ°ΡΡΠΈΠ²Π°()

// ВСст 1: пустой массив

Массив = Новый Массив;

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΠœΠ°ΡΡΠΈΠ²(Массив);

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ВСст 1 ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½");

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ВСст 1 ΠŸΠ ΠžΠ’ΠΠ›Π•Π: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

// ВСст 2: массив с 1 элСмСнтом

Массив = Новый Массив;

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("ВСст");

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΠœΠ°ΡΡΠΈΠ²(Массив);

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ВСст 2 ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½");

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ВСст 2 ΠŸΠ ΠžΠ’ΠΠ›Π•Π: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹;

πŸ’‘

АвтоматизированныС тСсты для массивов экономят часы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π”Π°ΠΆΠ΅ простыС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° пустой массив ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ элСмСнт Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ 80% ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок.

FAQ: ЧастыС вопросы ΠΏΠΎ ошибкС массивов

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π΄Π°ΠΆΠ΅ Ссли индСкс каТСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ?

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ·-Π·Π°:

  • πŸ” ДинамичСского измСнСния массива β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΡƒΠ΄Π°Π»ΠΈΠ»Π° элСмСнты.
  • πŸ” Ошибки Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ заполнСния β€” массив ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ создан с фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, Π½ΠΎ элСмСнты Π² Π½Π΅Π³ΠΎ Π½Π΅ добавились.
  • πŸ” ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ привСдСния Ρ‚ΠΈΠΏΠΎΠ² β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, индСкс пСрСдаётся ΠΊΠ°ΠΊ строка, Π° Π½Π΅ число.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ формируСтся массив ΠΏΠ΅Ρ€Π΅Π΄ ошибкой.

Как ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΏΠ°Π΄Π°Π»Π°?

ΠžΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ опасный ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊ ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°..Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив[ИндСкс];

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка доступа ΠΊ массиву: " + ОписаниСОшибки());

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = НСопрСдСлСно; // ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

Но ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅: это Π½Π΅ исправляСт ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ ошибки, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ маскируСт Π΅Ρ‘! Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ошибка ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘?

Π”Π°, Π½ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это связано с:

  • πŸ”§ ΠŸΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² рСгистрС накоплСния записаны Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ значСния.
  • πŸ”§ НСсовмСстимым ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ β€” Ссли конфигурация обновлялась с пропуском вСрсий.
  • πŸ”§ Ошибками Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΡ… β€” ваш ΠΊΠΎΠ΄ Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ.

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях рСкомСндуСтся:

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ (ВСстированиС ΠΈ исправлСниС Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅).
  2. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π΄ΠΎ послСднСй вСрсии.
  3. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, повторяСтся Π»ΠΈ ошибка.
Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ индСкс Π²Ρ‹Π·Π²Π°Π» ΠΎΡˆΠΈΠ±ΠΊΡƒ?

Π’ сообщСнии ΠΎΠ± ошибкС 1Π‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ указываСтся проблСмная строка ΠΊΠΎΠ΄Π°, Π½ΠΎ Π½Π΅ всСгда β€” ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ индСкс. Π§Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ:

  1. ΠŸΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ останова ΠΏΠ΅Ρ€Π΅Π΄ строкой с ошибкой.
  2. Π’ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ посмотритС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-индСкса (ИндСкс Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅).
  3. Π’Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ИндСкс) ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ массиву.

Если ошибка воспроизводится Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ массиву (см. Ρ€Π°Π·Π΄Π΅Π» Β«ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈΒ»).

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() ΠΈ Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1?

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ β€” Π½Π΅Ρ‚, ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π²Π΅Ρ€Π½ΡƒΡ‚ послСдний допустимый индСкс массива. Однако:

  • πŸ“ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() β€” Π±ΠΎΠ»Π΅Π΅ сСмантичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ массива.
  • πŸ“ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, особСнно Π² слоТных выраТСниях.

РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ читаСмости ΠΊΠΎΠ΄Π°.