Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1157020656
валет
2006-08-31 14:37
2006.09.17
ip адреса


2-1156910249
demonn1112
2006-08-30 07:57
2006.09.17
treeview


15-1156836324
dom2
2006-08-29 11:25
2006.09.17
Кто переведет...


3-1153123335
Sairex
2006-07-17 12:02
2006.09.17
Как экспортировать записи из таблицы Excel в Paradox ?


2-1156805812
7D7
2006-08-29 02:56
2006.09.17
Кодировка текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский