Seite 1 von 1

[Solved] Variable Array Größe

Verfasst: 1. April 2009 18:08
von Raien
Hi,

neues Problem ;)
Aaaaaber wahrsch. denken 90% beim Anblick des Titels daran, dass jetzt eine Frage wie "warum funktioniert sowas wie int array[_parameter] nicht?" kommt.
Aber genau das Gegenteil ist der Fall: Warum funktioniert das bei mir einwandrei?

Also z.B.:

Code: Alles auswählen

void f(int arrSize)
{
   int arr[arrSize];
}

In jedem Buch oder Tutorial etc. liest man, dass die Größe bei der Deklaration bereits bekannt sein muss (ist ja auch logisch, der Compiler muss ja irgendwie sein Stackframe hinkriegen).
Aber warum beanstandet er es mir nicht und es funktioniert ja auch einwandfrei.

Wäre cool wenn da jemand Erklärbär für mich spielt :wink:

Gruß
Raien

Verfasst: 1. April 2009 19:43
von androphinx
Ich habe keine Ahnung, warum das funktioniert, hast ja schon selber gesagt, dass es eigentlich nicht funktionieren sollte. Das einzige, wo es funktionieren sollte wäre ein:

Code: Alles auswählen

int *array = new int[size];
Mfg androphinx

Verfasst: 1. April 2009 20:04
von Christian81
Das ist eine gnu gcc-Extension.

Verfasst: 1. April 2009 20:37
von Raien
Richtig, genau dafür ist ja eigentlich der Heap da...

@Christian81:
Wenn du zuviel Zeit haben solltest ;) wärs cool wenn du mir das kurz erklären könntest, also was da intern abläuft (sofern du darüber Bescheid weist)
Wird da dann code drum herum gebaut der Speicher beim Heap alloziiert oder wie muss ich mir das vorstellen ?

Danke schonmal für die 2 Antworten dachte schon ich wär zu blöd zum Lesen... =)

Gruß
Raien

Verfasst: 1. April 2009 20:49
von Christian81
Soweit ich weiß ist es nur eine Kurzform von alloca() - macht ja auch genau das Gleiche.

Verfasst: 1. April 2009 21:27
von Raien
Mmmh stimmt die gibts ja auch noch ... hab mich damals schon gewundert wie das funktionieren soll da dynamisch Speicher vom Stack zu holen. Ma luckn was man dazu so im Internet findet wie das intern umgesetzt wird....

Sag auf jedenfall schonma Danke!

Gruß
Raien

Verfasst: 1. April 2009 21:32
von Christian81
Intern umgesetzt? Bei x86 wird wohl einfach ESP verändert und fertig.

Verfasst: 2. April 2009 06:50
von Raien
Ja is ja schon gut war halt schon spät :lol:

Man muss ja nur ESP erhöhen und am Schluss den alten Wert einfach wieder von EBP lesen und rausspringen dann passt ja wieder alles.
Hatte gestern sone Eingebung als würde der Linker da schon alles wissen müssen was ja total balabala ist ....

Also nochmals Danke

Gruß
Raien