![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как c этим бороться? [D7, 95/98]
fog © (2006-08-23 20:07:00)Дано:
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 работает. Что делать?
fog (2006-08-25 21:19:00) [1]Проблему решил.
Приведенная процедура
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 это прекрасно видно.
Loginov Dmitry_ (2006-08-24 13:31:00) [2]
> а в чем фишка TRxDBGrid? никогда его не пробовал.
Исправлена куча глюков обычного DBGrida,
добавлены кое-какие навороты.
fog (2006-08-24 13:20:00) [3]"Заскок" - когда 100% правильная команда либо не компилируется, либо не запускается. Как правило, приходятся на динамические массивы любой мерности и операции с строками.
О "сложности" - простая переделка дельфийского примера:
Delphi7\Demos\ResXplor\HexDump.pas
для моей задачи большего не требуется.
И опять про ВДРУГ - сначала работало, только довешивал переменные и соотв. функции, и ВДРУГ перестало работать. Причем, переписать с 0 в новом проекте - с тем же успехом.
StriderMan (2006-08-24 12:17:00) [4]
> Loginov Dmitry_ (24.08.06 12:09) [18]
> И даже RXLiba не любишь? Хотябы ради сеточки TRxDBGrid его
> стоит использовать (стандартная она как бы не серьезная).
да, наврал. использую TRxMemoryDataSet.
а в чем фишка TRxDBGrid? никогда его не пробовал.
Anatoly Podgoretsky (2006-08-24 12:13:00) [5]Loginov Dmitry_ (24.08.06 12:09) [18]
Я давно, давно убрал и как то жив и даже не тянет
Loginov Dmitry_ (2006-08-24 12:09:00) [6]
> Принципиально не люблю использовать все возможные компоненты/программы
> . Из нестандартных компонентов у меня установлен только
> FastReport.
И даже RXLiba не любишь? Хотябы ради сеточки TRxDBGrid его стоит использовать (стандартная она как бы не серьезная).
StriderMan (2006-08-24 12:02:00) [7]
> Плохиш © (24.08.06 11:41) [15]
> Не устанавливать все возможные компоненты/программы из разных
> помоек не пробовали?
Принципиально не люблю использовать все возможные компоненты/программы. Из нестандартныхкомпонентов у меня установлен только FastReport.
Anatoly Podgoretsky (2006-08-24 11:57:00) [8]Плохиш © (24.08.06 11:41) [15]
Сложно
Плохиш (2006-08-24 11:41:00) [9]
> Ega23 © (24.08.06 11:11) [14]
> Что делаю не так?
Во-во, тоже самое спросить хотел.
> StriderMan © (24.08.06 11:06) [13]
Не устанавливать все возможные компоненты/программы из разных помоек не пробовали?
Ega23 (2006-08-24 11:11:00) [10]
> А еще попробуйте поработать с группой проектов, в которой
> есть BPL-ка. При переключении между модулями разных проектов
> через некоторое время стабильно вываливается AV ну и т.д.
>
Ну у меня их 11 штук в группе проектов. Вываливания AV не наблюдаю.
Что делаю не так?
StriderMan (2006-08-24 11:06:00) [11]
> Плохиш © (24.08.06 10:55) [11]
> С этого места можно поподробнее про "заскоки"?
заскоки правда бывают, тут несмотря на всю любовь к Делфи, соглашусь.
Например Internal Error. Лечится только перезапуском делфи.
А еще попробуйте поработать с группой проектов, в которой есть BPL-ка. При переключении между модулями разных проектов через некоторое время стабильно вываливается AV ну и т.д.
default (2006-08-24 11:00:00) [12]обратите внимание на слово "вдруг" в сабже:)
может у него там вообще потоки подрались за общие данные?:)
Плохиш (2006-08-24 10:55:00) [13]
> "Заскоки" компилятора мне знакомы еще с D4.
С этого места можно поподробнее про "заскоки"?
Ketmar (2006-08-24 09:59:00) [14]> [9] Ega23 © (24.08.06 09:33)
> почему у тебя function CreateMC не class function
фабрика, наверное, недостроенная. %-)
Ega23 (2006-08-24 09:33:00) [15]А зачем ты её как Private объявил?
А почему у тебя function CreateMC не class function в секции public?
И вообще, зачем такой изврат?
StriderMan (2006-08-24 09:05:00) [16]а в чем глубокий смысл использования такого "внешнего" конструктора? Почему бы не написать конструктор в классе контрола?
Пусик (2006-08-24 00:44:00) [17]
> Именно на трассировке и поймал, что валиться SetLength(FData.
> ..
Убрать with не пробовал?
Ketmar (2006-08-24 00:41:00) [18]сильно подозреваю, что "заскок" всё же не у компилятора...
fog (2006-08-24 00:28:00) [19]2 Loginov Dmitry
Self ничего не решает - тоже самое.
2 Пусик
Именно на трассировке и поймал, что валиться SetLength(FData...
Сам факт, что произошло это внезапно. "Заскоки" компилятора мне знакомы еще с D4. Скорее всего придется делать "format c:"...
Пусик (2006-08-23 23:12:00) [20]
> Коментный вариант в CreateMC работает. Что делать?
Проводить трассировку по шагам и отлаживать.