|
|
Регистрация | << Правила форума >> | 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, то вылетает эта ошибка. Вообще не пойму, с другими массивами все отлично
|