C - Speicheradressierung bei Array ohne vorherige Groesse

exitboy

Erfahrenes Mitglied
Hallo,

ich wollte gerne mal wissen wie ein Array im Speicher ausschaut, wenn es vorher nicht von der Groesse festgelegt wurde.

Wenn ich ein Array wie folgt bestimme:

Code:
int arr[10]
dann ist klar, 4er Byte Schritte, Array Gesamt: 40 Byte (da 10x Int Wert von 4 Byte).
Siehe hier:
http://wwwuser.gwdg.de/~kboehm/ebook/bilder/08fig07.gif

1. Doch wenn ich dieses jetzt nicht auf eine Groesse festlege, wie sieht dann der Speicher aus? Es geht mir speziell um die Vorhersage (siehe Grafik, wo 3 Arrayplaetze nacheinander vergeben sind.)

2. Wie waere der Aufbau bei Dynamischen mehrdimensionaligen Arrays?
 
Hallo,

ich wollte gerne mal wissen wie ein Array im Speicher ausschaut, wenn es vorher nicht von der Groesse festgelegt wurde.

Wenn ich ein Array wie folgt bestimme:

Code:
int arr[10]
dann ist klar, 4er Byte Schritte, Array Gesamt: 40 Byte (da 10x Int Wert von 4 Byte).
Siehe hier:
http://wwwuser.gwdg.de/~kboehm/ebook/bilder/08fig07.gif

1. Doch wenn ich dieses jetzt nicht auf eine Groesse festlege, wie sieht dann der Speicher aus? Es geht mir speziell um die Vorhersage (siehe Grafik, wo 3 Arrayplaetze nacheinander vergeben sind.)

2. Wie waere der Aufbau bei Dynamischen mehrdimensionaligen Arrays?

Moin,

ich verstehe Deine Frage (1.) nicht ganz! :suspekt:
Was möchtest Du denn deklarieren? Etwas sowas:
Code:
...
int iArray[];
...

Dann wird Dein Compiler meckern, da die Größe zur Compilezeit bekannt sein muss! ! ! Und zwar eben aus genau dem Grund, dass ja an dieser Stelle der Speicher reserviert werden soll .....

Im Zweifel geht auch sowas nicht:
Code:
int x = 5;
int iArray[x];
da hier zur Deklaration von iArray eine konstanter Ausdruck erwartet wird ! ! !
Gruß
Klaus
 
Vollkommen richtig verstanden.

Angenommen ich wuerde von der BASH einen Wert entgegen nehmen (als Parameter), dann wuerde ich diesen dann wie von Dir als "x" deklariert direkt fuer den Arrayaufbau wie folgt verwenden. Ich meine das muss doch auch irgendwie handlbar sein:

Code:
int iArray[x];
 
Moin,

was Du machen kannst, ist allenfalls sowas:
Code:
int iLaenge
int *iDaten = new int[iLaenge];
...
// "delete[] iDaten" nicht vergessen ! ! !

Wobei dies C++-Code ist - wenn nur reines C hast, musst mit malloc und free arbeiten. Ich kann aber nicht mehr die exakte Syntax sagen, da dies eigentlich gefährlich ist (Speicherlecks etc.), und ich es von daher hier schon vor geraumer Zeit überall beseitigt habe!
Schau mal in Deine Hilfe !

Gruß
Klaus
 
ich brauch das ganze fuer assembler prognosen, moechte aber gerne den c hintergrund mit der Speicherverwaltung verstehen.
 
Moin,

wie gesagt, grundsätzlich musst Du dem Compiler zur Compilezeit sagen, wieviel Speicher er reservieren soll!

Lediglich bei der dynamischen Variante aus meinem letzten Post wird der Speicher zur Laufzeit bestimmt. Aber dies ist mit Vorsicht anzugehen, da sich hier Programmierfehler (bspw. unter C ständige "reallocs") schnell böse auswirken können ! ! !

Gruß
Klaus
 
Zurück