Forum > Generale

[Risolto] Errore di Classe su Matrice di una sola riga

(1/1)

petrusic:
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

--- Citazione ---Il progetto DomusRatio ha sollevato una eccezione di classe 'External: SIGSEGV'.
 All'indirizzo 42A23E

--- Termina citazione ---
dentro la procedura di controllo

--- Codice: ---
procedure TWinControl.KeyDownBeforeInterface(var Key: Word; Shift: TShiftState);
begin
  KeyDown(Key, Shift);
end;               

--- Termina codice ---

Ecco anche le istruzioni eseguite fino a quella che scatena l'ERRORE:

--- Codice: ---
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;                                                   

--- Termina codice ---

Riporto anche il contenuto della console al riguardo:

--- Citazione ---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

--- Termina citazione ---
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.

nomorelogic:
dovresti controllare l'assegnazione seguente
che secondo me non crea una matrice ma un array monodimensionale

--- Codice: ---
SetLength(tbAmmortamenti, Length(tabSplit));

--- Termina codice ---

per avere una matrice di 1 sola riga, dovresti fare:

--- Codice: ---
SetLength(tbAmmortamenti, 1, Length(tabSplit));

--- Termina codice ---

petrusic:

--- Citazione da: nomorelogic - Aprile 30, 2024, 07:25:48 pm ---dovresti controllare l'assegnazione seguente
che secondo me non crea una matrice ma un array monodimensionale

--- Codice: ---
SetLength(tbAmmortamenti, Length(tabSplit));

--- Termina codice ---

per avere una matrice di 1 sola riga, dovresti fare:

--- Codice: ---
SetLength(tbAmmortamenti, 1, Length(tabSplit));

--- Termina codice ---

--- Termina citazione ---

Si, me ne sono accorto.
L'impostazione corretta é

--- Codice: ---
SetLength(tbAmmortamenti, Length(tabSplit), 5)

--- Termina codice ---

Navigazione

[0] Indice dei post

Vai alla versione completa