Casualmente, è capitato che nella formazione di una matrice dinamica sia stata creata una matrice di una sola riga.
Ebbene, nel trasferire le singole celle nella prima riga di detta matrice, già al momento di impegnare la prima cella della prima ed unica riga, viene fornito il seguente Errore
Il progetto DomusRatio ha sollevato una eccezione di classe 'External: SIGSEGV'.
All'indirizzo 42A23E
dentro la procedura di controllo
procedure TWinControl.KeyDownBeforeInterface(var Key: Word; Shift: TShiftState);
begin
KeyDown(Key, Shift);
end;
Ecco anche le istruzioni eseguite fino a quella che scatena l'ERRORE:
if (Length(striAmmortamenti) > 0) then
begin
tabSplit:= striAmmortamenti.Split(chr(13));
WriteLn('Length(tabSplit)= ' + inttostr(Length(tabSplit)));
SetLength(tbAmmortamenti, Length(tabSplit));
for i:= 0 to (Length(tabSplit) - 1) do
begin
WriteLn('tabSplit[' + inttostr(i) + ']= ~' + tabSplit[i] + '~');
WriteLn('---');
tbEl:= tabSplit[i].Split(Chr(9));
WriteLn('Length(tbEl)= ' + inttostr(Length(tbEl)));
for j:= 0 to 4 do
begin
WriteLn('tbEl[' + inttostr(j) + ']= ~' + tbEl[j] + '~');
end;
k:= i; // Non sarebbe necessaria, ma l'ho agggiunta per togliere ogni mio dubbio
for j:= 0 to 4 do
begin
WriteLn('k= ' + inttostr(i));
WriteLn('j= ' + inttostr(j));
tbAmmortamenti[k, j]:= tbEl[j]; // <-- alla prima esecuzione
WriteLn('tbAmmortamenti[' + inttostr(k) + inttostr(j) + ']= ~' + tbAmmortamenti[k, j] + '~');
end;
end;
end;
Riporto anche il contenuto della console al riguardo:
Length(tabSplit)= 1
tabSplit[0]= ~110050180 101710180 tenaglia -4,3 20030103~
---
Length(tbEl)= 5
tbEl[0]= ~110050180~
tbEl[1]= ~101710180~
tbEl[2]= ~tenaglia~
tbEl[3]= ~-4,3~
tbEl[4]= ~20030103~
k= 0
j= 0
Manca l'ultima "WriteLn" a causa dell'Errore determinato dall'istruzione che la precede nella sequenza.
Che non siano gestite condizioni di matrici dinamiche con una sola riga? Mi pare logicamente impossibile.
dovresti controllare l'assegnazione seguente
che secondo me non crea una matrice ma un array monodimensionale
SetLength(tbAmmortamenti, Length(tabSplit));
per avere una matrice di 1 sola riga, dovresti fare:
SetLength(tbAmmortamenti, 1, Length(tabSplit));
dovresti controllare l'assegnazione seguente
che secondo me non crea una matrice ma un array monodimensionale
SetLength(tbAmmortamenti, Length(tabSplit));
per avere una matrice di 1 sola riga, dovresti fare:
SetLength(tbAmmortamenti, 1, Length(tabSplit));
Si, me ne sono accorto.
L'impostazione corretta é
SetLength(tbAmmortamenti, Length(tabSplit), 5)