![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Все делает правильно но в конце кидает "invalid pointer oper.."
Ezorcist © (2007-07-07 15:29:00)Программа простая и решает задачу подсчета среднего балла для студентов,
на форме кнопка, два поля memo (mem и log) в mem такие данные:
1,1,1
2,2,2
3,3,3
4,4,4
5,5,5
Обработчик onclick кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var i,l,g:integer; c:char; s:string;
a : array of array [1..3] of integer;
sb : array [1..3] of real;
counter :array [1..5] of integer;
begin
l:=mem.Lines.Count -1;
setlength(a,l);
sb[1]:=0;
sb[2]:=0;
sb[3]:=0;
for i:= 1 to 5 do counter[i]:=0;
for i:= 0 to l do begin
s:=mem.Lines.Strings[i];
for g:= 1 to 3 do begin
c:=s[1+2*(g-1)];
a[i][g] :=strtoint(c);
sb[g]:=sb[g]+a[i][g];
inc(counter[a[i][g]]);
end;
end;
sb[1]:=sb[1]/mem.Lines.Count;
sb[2]:=sb[2]/mem.Lines.Count;
sb[3]:=sb[3]/mem.Lines.Count;
log.Lines.Add('Средний балл по предмету №1 = '+floattostr(sb[1]));
log.Lines.Add('Средний балл по предмету №2 = '+floattostr(sb[2]));
log.Lines.Add('Средний балл по предмету №3 = '+floattostr(sb[2]));
log.Lines.Add('Средний балл по всем предметам = '+floattostr((sb[1]+sb[2]+sb[3])/3));
end;
программа выдает верный результат, но на последней строке ошибка "invalid pointer operation" а при завершении программы - EAV а за ней "error 216 at ..."
Юрий Зотов (2007-07-07 22:52:00) [1]> Ezorcist (07.07.07 22:47) [4]
По умолчанию эта проверка выключена.
Ezorcist (2007-07-07 22:47:00) [2]Спасибо теперь все работает! :-) Не заметил...
А почему ошибка не возникала сразу в момент обращения к несуществующему элементу массива?
Юрий Зотов (2007-07-07 15:40:00) [3]l := mem.Lines.Count - 1 ; // На 1 меньше нужного.
setlength(a,l);
...
for i:= 0 to l do // На 1 больше максимума
begin
...
a[ i ][g] :=strtoint(c);
В индексации - полная неразбериха. Отсюда и 216.
Однокамушкин (2007-07-07 15:37:00) [4]Вы выделили для массива a памяти на l элементов, а цикл у вас от 0 до l - это уже получается l+1 элемент... К какой памяти вы обащаетесь на последней итерации цикла - а фиг его знает...
antonn (2007-07-07 15:31:00) [5]
> setlength(a,l);
а без этого?