Nachdenklicher schrieb:
> So lange du nur lesend zugreifst und Dir bewußt bist, daß Du bei
> den
> Elementen die "hinter" dem Ende liegen, Mist stehen hast, ist das
> normalerweise unproblematisch. Außer Du bist auf einer Plattform, die
> das abfängt und darauf irgendwie reagiert...
Eigentlich sollte das jedes halbwegs moderne Betriebssystem der letzten
ca. 25 Jahre tun, zumindest wenn man hinreichend weit hinter dem Ende
des Arrays zugreift und dabei die für das Programm legalen
Speicherbereiche verlässt (wir sind hier ja im Unterforum
PC-Programmierung, auf µCs ohne Betriebssystem sieht das idR anders
aus).
(Erzeugt dieses Verhalten nicht unter Windows 95 die berühmte
"Allgemeine Schutzverletzung"?)
Wenn man nur zwei Bytes hinter das Array greift, hat man aber gute
Chancen, dass man noch nicht aus dem Speicherbereich des Programms
hinaus gelaufen ist. Probier es halt aus:
1 | char buffer[20];
|
2 |
|
3 | void tuWas(char * mBuffer, int length)
|
4 | {
|
5 | char a = mBuffer[20+2];
|
6 | }
|
7 |
|
8 | int main(void)
|
9 | {
|
10 | tuWas(buffer, 20);
|
11 | }
|
Oder sprichst du von einem großen Array, in dem du nur die ersten
Speicherstellen beschreibst? Also:
1 | char buffer[20];
|
2 |
|
3 | void tuWas(char * mBuffer, int length)
|
4 | {
|
5 | char a = mBuffer[18];
|
6 | }
|
7 |
|
8 | int main(void)
|
9 | {
|
10 | buffer[0] = 'a';
|
11 | buffer[1] = 'b';
|
12 | buffer[2] = 'c';
|
13 | tuWas(buffer, 3);
|
14 | }
|
Das ist unproblematisch (solange du weißt, dass du zufällige Werte liest
und solange die Längen alle zusammenpassen).
MfG, Arno