Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизКак c этим бороться? Найти похожие ветки
← →
fog (2006-08-23 20:07) [0]Дано:
type
TMyControl = class(TCustomControl)
private
FData: array of integer;
procedure SetData(AD:integer);
end;
procedure TMyControl.SetData(AD:integer);
begin
SetLength(FData, AD);
end;
function CreateMC(AOwner: TWinControl; AD: integer): TMyControl;
begin
Result := TMyControl.Create(AOwner);
...
with Result do
begin
Parent := AOwner;
Align := alClient;
{SetLength(Result.FData, 6000);}
SetData(AD);
end;
end;
При создании формы имеем:
procedure TForm1.FormCreate(Sender: TObject);
begin
FMC := CreateMC(Form1, 6000);
end;
Суть проблемы - при очередной отладке проги вдруг перестала работать SetData - стал получать EAccessViolation на попытку SetLength. Коментный вариант в CreateMC работает. Что делать?
← →
Loginov Dmitry © (2006-08-23 22:00) [1]А может ошибка все-же в другом месте? Здесь патологий вроде не выявлено...
← →
Loginov Dmitry © (2006-08-23 22:02) [2]> При создании формы имеем:
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> FMC := CreateMC(Form1, 6000);
> end;
Какое значение тут имеет переменная Form1?
Что будет, если заменить ее на Self?
← →
default © (2006-08-23 22:31) [3]больше кода нужно для локализации ошибки...
единственное, что можно было подумать, что AD где-то меняется на отрицательное, но тогда исключение выход за диапазон, а не AV
← →
Пусик © (2006-08-23 23:12) [4]
> Коментный вариант в CreateMC работает. Что делать?
Проводить трассировку по шагам и отлаживать.
← →
fog (2006-08-24 00:28) [5]2 Loginov Dmitry
Self ничего не решает - тоже самое.
2 Пусик
Именно на трассировке и поймал, что валиться SetLength(FData...
Сам факт, что произошло это внезапно. "Заскоки" компилятора мне знакомы еще с D4. Скорее всего придется делать "format c:"...
← →
Ketmar © (2006-08-24 00:41) [6]сильно подозреваю, что "заскок" всё же не у компилятора...
← →
Пусик © (2006-08-24 00:44) [7]
> Именно на трассировке и поймал, что валиться SetLength(FData.
> ..
Убрать with не пробовал?
← →
StriderMan © (2006-08-24 09:05) [8]а в чем глубокий смысл использования такого "внешнего" конструктора? Почему бы не написать конструктор в классе контрола?
← →
Ega23 © (2006-08-24 09:33) [9]А зачем ты её как Private объявил?
А почему у тебя function CreateMC не class function в секции public?
И вообще, зачем такой изврат?
← →
Ketmar © (2006-08-24 09:59) [10]> [9] Ega23 © (24.08.06 09:33)
> почему у тебя function CreateMC не class function
фабрика, наверное, недостроенная. %-)
← →
Плохиш © (2006-08-24 10:55) [11]
> "Заскоки" компилятора мне знакомы еще с D4.
С этого места можно поподробнее про "заскоки"?
← →
default © (2006-08-24 11:00) [12]обратите внимание на слово "вдруг" в сабже:)
может у него там вообще потоки подрались за общие данные?:)
← →
StriderMan © (2006-08-24 11:06) [13]
> Плохиш © (24.08.06 10:55) [11]
> С этого места можно поподробнее про "заскоки"?
заскоки правда бывают, тут несмотря на всю любовь к Делфи, соглашусь.
Например Internal Error. Лечится только перезапуском делфи.
А еще попробуйте поработать с группой проектов, в которой есть BPL-ка. При переключении между модулями разных проектов через некоторое время стабильно вываливается AV ну и т.д.
← →
Ega23 © (2006-08-24 11:11) [14]
> А еще попробуйте поработать с группой проектов, в которой
> есть BPL-ка. При переключении между модулями разных проектов
> через некоторое время стабильно вываливается AV ну и т.д.
>
Ну у меня их 11 штук в группе проектов. Вываливания AV не наблюдаю.
Что делаю не так?
← →
Плохиш © (2006-08-24 11:41) [15]
> Ega23 © (24.08.06 11:11) [14]
> Что делаю не так?
Во-во, тоже самое спросить хотел.
> StriderMan © (24.08.06 11:06) [13]
Не устанавливать все возможные компоненты/программы из разных помоек не пробовали?
← →
Anatoly Podgoretsky © (2006-08-24 11:57) [16]Плохиш © (24.08.06 11:41) [15]
Сложно
← →
StriderMan © (2006-08-24 12:02) [17]
> Плохиш © (24.08.06 11:41) [15]
> Не устанавливать все возможные компоненты/программы из разных
> помоек не пробовали?
Принципиально не люблю использовать все возможные компоненты/программы . Из нестандартных компонентов у меня установлен только FastReport.
← →
Loginov Dmitry_ (2006-08-24 12:09) [18]
> Принципиально не люблю использовать все возможные компоненты/программы
> . Из нестандартных компонентов у меня установлен только
> FastReport.
И даже RXLiba не любишь? Хотябы ради сеточки TRxDBGrid его стоит использовать (стандартная она как бы не серьезная).
← →
Anatoly Podgoretsky © (2006-08-24 12:13) [19]Loginov Dmitry_ (24.08.06 12:09) [18]
Я давно, давно убрал и как то жив и даже не тянет
← →
StriderMan © (2006-08-24 12:17) [20]
> Loginov Dmitry_ (24.08.06 12:09) [18]
> И даже RXLiba не любишь? Хотябы ради сеточки TRxDBGrid его
> стоит использовать (стандартная она как бы не серьезная).
да, наврал. использую TRxMemoryDataSet.
а в чем фишка TRxDBGrid? никогда его не пробовал.
← →
fog (2006-08-24 13:20) [21]"Заскок" - когда 100% правильная команда либо не компилируется, либо не запускается. Как правило, приходятся на динамические массивы любой мерности и операции с строками.
О "сложности" - простая переделка дельфийского примера:
Delphi7\Demos\ResXplor\HexDump.pas
для моей задачи большего не требуется.
И опять про ВДРУГ - сначала работало, только довешивал переменные и соотв. функции, и ВДРУГ перестало работать. Причем, переписать с 0 в новом проекте - с тем же успехом.
← →
Loginov Dmitry_ (2006-08-24 13:31) [22]
> а в чем фишка TRxDBGrid? никогда его не пробовал.
Исправлена куча глюков обычного DBGrida,
добавлены кое-какие навороты.
← →
fog (2006-08-25 21:19) [23]Проблему решил.
Приведенная процедураprocedure TMyControl.SetData(AD:integer);
begin
SetLength(FData, AD);
end;
имеет несколько другой видprocedure TMyControl.SetData;
var AD,
Y: ingeger;
X: smallint;
begin
...
SetLength(FData, AD);
...
end;
при редакции убил Y и, таким образом, впервые столкнулся с тем, что меньшее значение нельзя передать через большее (что через byte не пропихнуть int64 - ежу поятно).
Не спасает полный build проекта.
В окне CPU это прекрасно видно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c