![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
При удалении(Destroy) компонента вылетает ошибка EInvalidPointer на строке AnswersA := nil; AnswersB := nil;(ну или FreeMemory) все испробовал, не исправляется... Может, структура неправильная? Деструктор стандартный
Код:
TTestAnswerA = record
Answered : boolean;
AnswerSingle : TQValue;
AnswerMulti : Cardinal;
end;
TTestAnswerB = record
Answered : boolean;
Answer : shortstring;
end;
TTestingData = class(TComponent)
private
AnswersA : array of TTestAnswerA;
AnswersB : array of TTestAnswerB;
... |
|
#2
|
||||
|
||||
|
Покажи весь код.
|
|
#3
|
||||
|
||||
|
Вот весь код
|
|
#4
|
|||
|
|||
|
Ты что собрался удалять???
Не надо ничего удалаять!!! Если уж ты хочешь возяиться с массивами, то для удаления n-того элемента тебе надо: 1. Скопировать все элементы массива с n+1 до Length(массив). 2. Укоротить массив на 1 элемент. Выглядеть должно что-то типа этого: Код:
var
I : Integer;
begin
If (ADelItem < Low(AArray)) Or (ADelItem > High(AArray)) Then
Raise Exception.CreateFmt('Item index not in array (%d)',[ADelItem]);
For I := ADelItem To High(AArray) - 1 Do
AArray[i] := AArray[I+1];
SetLength(AArray,Length(AArray)-1);
end;AArray - массив, в котором удаляем элемент. |
|
#5
|
||||
|
||||
|
Я знаю это, только я удаляю не элемент массива, и даже не сам массив, а КОМПОНЕНТ, который в себе его содержит, а ошибка вылетает на том месте, где удаляется(точней освобождается память) массив AnswersB
|
|
#6
|
|||
|
|||
|
Цитата:
А массив не надо удалять. Он освободит память автоматически. Если очень хочется то сделай ему SetLength с нулевой длинной. |
|
#7
|
||||
|
||||
|
В том то и дело, что когда я присваиваю ему длину 0 или значение nil, то вылетает эта ошибка. Вообще не пойму, с другими массивами все отлично
|