warning: array subscript is above array bounds

OP #1511173
mein GCC bringt obenstehende Warnung, wenn bei einem Feld (bereits im 
statischen Quellcode) der Index zu groß wird. Dabei warnt er, wenn der 
Indexzahl größer als die Arraygröße wird. Eigentlich müsste er doch 
schon bei Indexzahl gleich Arraygröße warnen, weil das Nullte Element ja 
das erste im Array ist und somit Arraygröße -1 das letze Element angibt 
?
Gast #1511444
Da du keinen Quelltext lieferst, ist es schewr eine aussage zu machen.
Es kann sein dass der Compiler sein eigneen Aliasing berücksichtigt und 
z.B. erkennt, dass, wenn du ein CharArray[5] anlegst, bei 32bit 
ausrichtung der Index CharArray[7] sogar noch gültig ist, auch wenn er 
über den Arraygrenzen liegt. (die nächste variable würde ja erst bei 
CharArray[8] beginnen)

Ist aber nur vermutung.

MFG
#1511889
> Da du keinen Quelltext lieferst, ist es schewr eine aussage zu machen.

So ist es.

> Es kann sein dass der Compiler sein eigneen Aliasing

... Alignment ...

>berücksichtigt und
> z.B. erkennt, dass, wenn du ein CharArray[5] anlegst, bei 32bit
> ausrichtung der Index CharArray[7] sogar noch gültig ist,

Nein.  Nach Standard verursacht das "Undefined behaviour".  In realen 
Implementationen mag das meist hinhauen, aber "gültig" ist es deshalb 
noch lange nicht.
Gast #1511932
Andere Idee:

Nach Standard ist der Pointerwert a+8 bei einem als T a[8] definierten 
Array noch definiert (bedeutet, man kann ne for-Schleife übers Array 
machen und die Abbruchbedingung aus dem laufenden Pointer selbst 
ableiten). Man darf ihn nur nicht dereferenzieren.

a+9 ist dagegen undefined (also auch das Ergebnis der Pointerarithmetik 
selbst; hier kann, je nach Lage von a im Speicher ein Wraparound über 
das Adressraumende oder ein Segmentende auf Plattformen mit 
segmentiertem Speicher stattgefunden haben, so dass ein Vergleich oder 
eine Pointerdifferenz nachher Unsinn liefert).

Kann sein, dass gcc deswegen bei der Warnung genau so prüft, auch, wenn 
es hier nicht genau passt (da je dereferenziert wird).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.