Zitat von
Hador:
Zitat von
Apollonius:
Ich vermute, dass der C-Compiler ein int[1] als statisches Array implementiert, d.h. auf dem Stack ablegt. Um zu dynamischen Arrays, also int[], kompatibel zu bleiben, erlaubt er p = feld weiterhin und interpretiert es als Abkürzung für p = &feld[0]. feld = p funktioniert aber nicht, weil feld als statisches Array eine feste Adresse hat. Dies ist jedoch nur Spekulation! Ich habe es nicht getestet.
Dynamische Arrays gibt es im C90 nur insoweit, dass man etwas sowas schreiben kann: int[] = {1, 2, 3}. Wirklich dynamisch ist das nicht. Aber ich werde da mal ein wenig weiterprobieren.
In C99 waren die Leute die die Spec verfasst haben auf Drogen und erlauben dynamische Arrays auf dem Stack. Also z.B. sowas hier:
Code:
int function(int i)
{
int intarray[i];
[...]
}
Der erzeugte Code gleicht in fast allen Fällen einem alloca, wobei alloca in fast allen Implementierungen (der Microsoft Compiler ist da die einzige mir bekannte Ausnahme) schlecht implementiert ist (eine einfache Stack Pointer Modifikation ohne irgendwelche Checks). Wenn Du es schaffst i von aussen zu beeinflussen, hast Du als "Angreifer" also volle Kontrolle über den Stackpointer und das ist im Normalfall keine sonderlich gute Idee.