Вопрос по arrays – Delphi: TImage.Create вызывает нарушение прав доступа

4

Заранее извиняюсь за вопрос новичка, но почему я получаю & quot; нарушение прав доступа & quot; ошибка с кодом ниже (в строке & quot; Создать (SelectorForm); & quot;)? Я пытался использовать основную форму в качестве владельца, но это не имело никакого значения.

<code>var
  SelectorForm: TSelectorForm;
  ArrayOfImages: Array [1..10] of TImage;

implementation

procedure TSelectorForm.FormCreate(Sender: TObject);
var
  Loop: Byte;
begin
  for Loop := 1 to 10 do
  begin
    with ArrayOfImages[Loop] do
    begin
      Create(SelectorForm);
    end;
  end;
end;
</code>

Ваш Ответ

2   ответа
0

Существует много проблем с приведенным выше кодом. (не используйте «С» для начала, не используйте байт для вашего цикла var)

Мое предположение состоит в том, что вам, в конечном счете, нужен массив экземпляров TImage, созданный с формой в качестве родительского.

так что исходя из этого предположения ... вы хотите что-то вроде (не проверено)

var
  ArrayOfImages: Array [0..9] of TImage;  
  i : integer;
begin
  for i := 0 to 9 do
  begin
    ArrayOfImages[i] := TImage.Create(theForm);
  end;

end;

Теперь обратите внимание, что вы будете нести ответственность за очистку массива, когда вы закончите его использовать, вам нужно будет бесплатно вызывать каждый экземпляр Image.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
17

Проблема в том, что вы эффективно делаете это:

var
  imageVariable: TImage;
begin
  imageVariable.Create (ParentForm);
end;

Что не так, потому что & quot; Создать & quot; метод вызывается для переменной, которая еще не была назначена.

Вы должны сделать это:

var
  imageVariable: TImage;
begin
  imageVariable := TImage.Create (ParentForm);
  try
    //use the object
  finally
    FreeAndNil (imageVariable);
  end;
end;

Или более конкретно в вашем коде:

for Loop := 1 to 10 do
begin
  ArrayOfImages[Loop] := TImage.Create (Self);
end;

Don't forget to free the objects

РЕДАКТИРОВАТЬ: Принятие комментария @ andiw и возврат подсказки об освобождении объектов. EDIT2: принятие комментария @ Gerry и использование Self в качестве владельца.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы