Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
3-1142492165
thvfrjd
2006-03-16 09:56
2006.05.07
значение null поля


15-1144737138
Тульский
2006-04-11 10:32
2006.05.07
Лимон на подоконнике


2-1145287073
vagra
2006-04-17 19:17
2006.05.07
Как сократить полный путь файла?


6-1136870292
[Gss]Pass
2006-01-10 08:18
2006.05.07
TIdSocketHandle


2-1145633091
mahab
2006-04-21 19:24
2006.05.07
DVD-RW





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский