Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.07.2010, 23:07
Fazotron Fazotron вне форума
Прохожий
 
Регистрация: 26.10.2009
Сообщения: 38
Репутация: 10
По умолчанию Двумерный массив

Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j: integer;
l1,l2:integer;
a:array of real;
b:array of real;
c:array of array of real;

begin
l1:=Memo1.Lines.Count;
l2:=Memo2.Lines.Count;
setlength(a,l1);
setlength(b,l2);
setlength(c,l1,l2);




For i:= 1 to l1 do
begin
a[i]:= strtofloat(Memo1.Lines[i-1]);
end;

For j:= 1 to l2 do
begin
b[j]:= strtofloat(Memo2.Lines[j-1]);
end;

For i:= 0 to (l1-1) do
begin
For j:= 0 to (l2-1) do
begin
c[i,j]:=a[i+1]*b[j+1];
end;
end;

Почему у меня вылетает ошибка Invalid pointer operation?
Ответить с цитированием
  #2  
Старый 12.07.2010, 23:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,098
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

На какой строке? Тут телепатов нет...
Ответить с цитированием
  #3  
Старый 13.07.2010, 00:09
Fazotron Fazotron вне форума
Прохожий
 
Регистрация: 26.10.2009
Сообщения: 38
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
На какой строке? Тут телепатов нет...
Код:
c[i,j]:=a[i+1]*b[j+1];
тут кажется проблема
Ответить с цитированием
  #4  
Старый 13.07.2010, 00:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,098
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ага, понятно.
Дело в том, что индексация динамических массивов начинается с 0. Ты просто вылетаешь за границу массива и попадаешь в защищенную облась. Если включишь в компиляторе нужную проверку,то будешь получать ошибку Out of bounds. Используй при навигации по динамическим (да лучше всего по любым) массивам функции Low() и High() (в смысле для определения их границ).
Ответить с цитированием
  #5  
Старый 18.07.2010, 17:48
Fazotron Fazotron вне форума
Прохожий
 
Регистрация: 26.10.2009
Сообщения: 38
Репутация: 10
По умолчанию

А в двумерных динамических тоже с 0?
Ответить с цитированием
  #6  
Старый 18.07.2010, 18:04
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от Fazotron
А в двумерных динамических тоже с 0?
да, только в pchar (String) текст идёт от 1, но 0 всё же используется
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:15.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025