EAccessViolation на многомерный массив
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



EAccessViolation на многомерный массив Expand / Collapse
Автор
Сообщение
24.01.2007 23:59
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 24.10.2007 1:17
Сообщ.: 38, Visits: 316
Есть вот такой код:

...
var
MessGn: array of array of array of real;
...
Z:=1; Imax:=4; Jmax:=4;
SetLength(MessGn,Z,Imax+1,Jmax+1);

for I:=1 to Imax do
for J:=1 to Jmax do
MessGn[Z,I,J]:=StrToFloat(MatrixGrid.Cells[I,J]); <вот на этой строке, в первом же круге цикла возникает ошибка EAccessViolation. Ячейки заполнены в соответствии с real.

Пробовал ставить Z:=100, вроде проходит весь цикл. Но мне так нельзя - Z должно быть совсем не 100, а 1.
Если SetLength не ставить (так вообще можно делать, кажися), выбивает на ту же самую ошибку.
Сообщ. #910035
25.01.2007 11:04
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 18.12.2007 11:03
Сообщ.: 121, Visits: 1 203
есть такая функция StrToFloatDef

нужно обрабатывать тот случай, если у тебя в ячейке не число, или ты думаешь, что число а оно все таки не число :)

Сообщ. #910044
25.01.2007 12:45
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 24.10.2007 1:17
Сообщ.: 38, Visits: 316
Трабла не в сответствии типов, а в размере массива или памяти, которая выделяется под него.
Сообщ. #910054
26.01.2007 11:28
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 18.12.2007 11:03
Сообщ.: 121, Visits: 1 203
а, ну тогда смотри внимательно на свою строчку SetLength(MessGn,Z,Imax+1,Jmax+1);

чем первая размерность отличается от второй и треттей принципиально, ведь ничем?

для второй и третьей ты правильно написал длинну+1 (потому что ты не используешь значения массива с индексом 0, а первый индекс тут всегда 0).

а вот для первой размерности - неправильно указал длинну. если Z=1 то первый (и  он же последний) индекс будет 0, а ты обращаешься к индексу 1 (а его нету, при динне массива 1)

сделай по аналогии +1

Сообщ. #910097
27.01.2007 18:27
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 24.10.2007 1:17
Сообщ.: 38, Visits: 316
Ай, хороший человек! Спасибо! Все заработало!
Сообщ. #910144
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 4:12