Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.07;
Скачать: CL | DM;

Вниз

Динамические массивы типа запись   Найти похожие ветки 

 
User_OKA   (2006-04-15 19:27) [0]

Мастера зацените, похоже перемудрил.
Три динамических массива типа запись, причем в одной записе тоже есть динамический массив.
Загибается прога если выставить максимальные значения.

mCPU - 0..9
PassByOZU - 0..9
mOZU - 0..9
mTask - 0..19

rCPU = record
 Number : Byte;
 IndOZU : Byte;
 PassByOZU : array of Byte;
 TimeConflict, TimeWork, FaktorLoading, NumberConflict : Byte;
 tNumber, tTimeCPU, tTimeOZU : Byte;
end;

rOZU = record
 Number : Byte;
 CPU : Integer;
 tTimeOZU : Integer;
end;

rTask = record
 Number, TimeCPU, TimeOZU : Byte;
end;

mCPU = array of rCPU;
mOZU = array of rOZU;
mTask = array of rTask;

Какие будут предложения?


 
Anatoly Podgoretsky ©   (2006-04-15 19:57) [1]

Не выставляй максимальные


 
Гаврила ©   (2006-04-15 20:08) [2]

Покажи, как, и главное - куда, ты выставляешь максимальные значения, и каким именно образом валится при этом прога


 
TUser ©   (2006-04-16 05:50) [3]


> Загибается прога если выставить максимальные значения.

Наверняка, не учел, что элементы динамического массива нумеруются с нуля. А следовательно в массиве из 10 элементов, максимальный индекс - 9.


 
tesseract ©   (2006-04-16 08:15) [4]

рекомендую записи всё-же объявить packed.


 
User_OKA   (2006-04-16 08:21) [5]

Вот здесь накрывается. Может накрыться при разных размерах массива
pCPU (0..6;0..7;....0..9)
При маленьких значениях все нормально (0..1;....0..5)

procedure TMainForm.CPURecordData(pCPU : mCPU);
var
CountCPU, CountOZU, number : Byte;
temp : String;
begin
for CountCPU:=0 to High(pCPU) do
 if High(CPU[CountCPU].PassByOZU) >= 0 then
  for CountOZU:=0 to High(CPU[CountCPU].PassByOZU) do
   CPU[CountCPU].PassByOZU[CountOZU]:=0;
for CountCPU:=0 to High(pCPU) do begin
 CPU[CountCPU].Number:=CountCPU + 1;
 temp:=Trim(SettingForm.CPU_OZUValueListEditor.Cells[1,CountCPU + 1]);
 if SettingForm.CPU_OZURadioGroup.ItemIndex = 0 then
  SetLength(CPU[CountCPU].PassByOZU,1)
 else                                                
  SetLength(CPU[CountCPU].PassByOZU,High(pCPU)+1);
 for CountOZU:=0 to High(pCPU) do
  if SettingForm.CPU_OZURadioGroup.ItemIndex = 0 then
   CPU[CountCPU].PassByOZU[CountOZU]:=CountCPU+1
  else begin                                          
   number:=pos(" ",temp);
   if number > 0 then begin
    CPU[CountCPU].PassByOZU[CountOZU]:=StrToInt(copy(temp,1,number-1));
    delete(temp,1,number);
   end
   else
    CPU[CountCPU].PassByOZU[CountOZU]:=StrToInt(temp);
  end;
  CPU[CountCPU].TimeConflict:=0;    
 CPU[CountCPU].TimeWork:=0;        
 CPU[CountCPU].FaktorLoading:=0;  
 CPU[CountCPU].NumberConflict:=0;  
end;
end;


 
tesseract ©   (2006-04-16 09:02) [6]


> for CountCPU:=0 to High(pCPU) do

попробуй For CountCPU:0 to length(pCpu)-1 do


 
User_OKA   (2006-04-16 10:09) [7]

а в чем разница между High(pCPU) и length(pCpu)-1 помоему одно и то же.

я пришел к выводу, что прога накрывается из-за динамического массива, который расположен в одной из записей, токо почему она накрывается понять не могу

procedure TMainForm.CPURecordData(pCPU : mCPU);
var
CountCPU, CountOZU, number : Byte;
temp : String;
begin
for CountCPU:=0 to High(pCPU) do
if High(CPU[CountCPU].PassByOZU) >= 0 then
 for CountOZU:=0 to High(CPU[CountCPU].PassByOZU) do
  CPU[CountCPU].PassByOZU[CountOZU]:=0;
for CountCPU:=0 to High(pCPU) do begin
CPU[CountCPU].Number:=CountCPU + 1;
temp:=Trim(SettingForm.CPU_OZUValueListEditor.Cells[1,CountCPU + 1]);
if SettingForm.CPU_OZURadioGroup.ItemIndex = 0 then
 SetLength(CPU[CountCPU].PassByOZU,1)
else                                                
 SetLength(CPU[CountCPU].PassByOZU,High(pCPU)+1);
for CountOZU:=0 to High(pCPU) do
 if SettingForm.CPU_OZURadioGroup.ItemIndex = 0 then
  CPU[CountCPU].PassByOZU[CountOZU]:=CountCPU+1
 else begin                                          
  number:=pos(" ",temp);
  if number > 0 then begin
   CPU[CountCPU].PassByOZU[CountOZU]:=StrToInt(copy(temp,1,number-1));
   delete(temp,1,number);
  end
  else
   CPU[CountCPU].PassByOZU[CountOZU]:=StrToInt(temp);
 end;
 CPU[CountCPU].TimeConflict:=0;    
CPU[CountCPU].TimeWork:=0;        
CPU[CountCPU].FaktorLoading:=0;  
CPU[CountCPU].NumberConflict:=0;  
end;
end;


 
Virgo_Style ©   (2006-04-16 11:31) [8]

Код даже не компилируется, описания переменных сплошь и рядом не преведены, понятия "валится" и "накрывается" не раскрыты.

Ни-ти-во не понимаю (с)


 
User_OKA   (2006-04-16 12:25) [9]

Конечно не будет компилироваться, я же привел фрагмент кода программы,.
В шапке написано, что объявлено три динамических массива типа запись и там же пример их объявления.


 
Virgo_Style ©   (2006-04-16 14:22) [10]

User_OKA   (16.04.06 12:25) [9]
я же привел фрагмент кода программы,.


А я, ясное дело, буду восстанавливать его до полного посредством телепатора и чьей-то матери? Или прикажете по исходному тексту гадать, что у вас там и где выдается?

Тогда озвучивайте сумму. Батарейки для телепатора - тоже за ваш счет.


 
User_OKA   (2006-04-16 14:34) [11]

проще тогда будет тебе исходники проги выслать, чтоб ты не мучился


 
Virgo_Style ©   (2006-04-16 15:01) [12]

Вы знаете, я не то что бы не мучаюсь, а просто счастлив в своем неведеньи)))

Оно, неведенье, мешает мне только в одном - ответить на ваш вопрос. Но это же не мне надо, правда?

Удачи.


 
Anatoly Podgoretsky ©   (2006-04-16 16:30) [13]

User_OKA   (16.04.06 14:34) [11]
Можно и исходники, но тогда это уже саппорт со всеми вытекающими.


 
Старик   (2006-04-17 07:53) [14]

Еще ни разу не пользовался саппортом на этом сайте, да и вообще никогда им не пользовался, но хотелось бы знать:
1. А что он в себя включает? В вашем понимании
2. А какие такие у саппорта вытекающие? Исходники? Денежки?



Страницы: 1 вся ветка

Текущий архив: 2006.05.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
4-1139945594
Volf_555
2006-02-14 22:33
2006.05.07
Как свернуть/развернуть все MDI-окна в моём приложении?


10-1118746276
Непоседа
2005-06-14 14:51
2006.05.07
Подскажите, что я забыл задекларировать


15-1145095256
SergP.
2006-04-15 14:00
2006.05.07
Нужна помощь по скачиванию файла


2-1145360339
Elen
2006-04-18 15:38
2006.05.07
Сообщения


15-1145184216
x.pro
2006-04-16 14:43
2006.05.07
Проблема с драйверами?