Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как c этим бороться? [D7, 95/98]


Страницы:   1 2

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 работает. Что делать?


Проводить трассировку по шагам и отлаживать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо