Ich versuche, das 'Last
Attribut mit einem 2D-Array in Ada zu verwenden, aber ich kann nicht scheinen, die richtige Syntax dafür zu finden.Wie verwende ich das letzte Attribut für mehrdimensionale Arrays in Ada?
Ich weiß, dass ich, wenn ich ein 1D-Array/Vektor habe, A'last oder A'last (n) verwenden kann, wobei n die n-te Dimension ist. Aber wenn ich die folgenden
type UnconstrainedArray_2D is array (Integer range <>, Integer range <>) of Integer;
function temp(tempIn : in Integer;
Table : in UnconstrainedArray_2D) return Integer is
tempTable : UnconstrainedArray_2D(0..tempIn, 0..tempIn);
begin
for i in 0..tempTable'last(1) loop
for j in 0..tempTable'last(2) loop
tempTable(i, j) := Table(i,j);
end loop;
end loop;
end temp;
erhalte ich die folgenden Kompilierung-Fehler:
Storage_Error stack overflow (or erroneous memory access)
Also, was mache ich falsch?
Ich verwende GNAT Pro 6.4.1 unter Linux.
Ich habe festgestellt, dass der Fehler mit der 'Table: in UnconstrainedArray_2D' in der Funktion zusammenhängt. Aber ich bin mir immer noch nicht sicher, was ich falsch gemacht habe. – Fred
Ich habe auch auf GNAT Pro 7.0.1 aktualisiert, um zu sehen, ob es ein Compiler Bug war, aber ich bekomme den gleichen Fehler. – Fred
Kein gültiger Auszug, ich nehme an "temp_table ist UnconstrainedArray_2D ..." s.b. "temp_table: UnconstrainedArray_2D ...". Das behebt, dass die anderen fehlenden Schlüsseldaten die Argumente sind, die Sie im Aufruf von temp() angeben. Wenn es sich um große Werte handelt, kann das Zuweisen einer lokalen Variablen (tempTable) den Stapel leicht durchbrechen. Es gibt auch spröde Annahmen über Array-Indexbereiche, die erfordern, dass die Argumente tempIn und Table mit der Deklaration der Variable tempTable konsistent sind, z. Es wird angenommen, dass die Tabelle mit 0 Indizes beginnt, wobei tempIn> = ist als die Tabellenindizes. "Last ist nicht dein Problem. –