Forum: Compiler & IDEs Array und dessen Index


von Rahul D. (rahul)


Lesenswert?

Moin,
Irgendwas muss ich übersehen haben
Ich habe ein Array:
1
volatile unsigned char PVWChannel[16]={ 1,2,3,4,5,6,7,133,9,10,11,12,13,14,15,16};

Auf dieses wird mittels des Index
1
unsigned char key;
zugegriffen.
"key" werden Werte zwischen 0 und 16 zugewiesen, wobei die 0 
herausgefiltert wird (Rückgabewert einer Matrix-Tastaturabfrage: "0" = 
keine Taste gedrückt).
Auf das Array greife ich nun so zu:
1
xyz = PVWChannel[key-1];

Es sollte also bei key = 1 xyz=1 sein oder bei key = 8 xyz = 133.
Ist es aber nicht.
Bei key = 1 ist xyz = 0 und bei key = 8 ist xyz = 132.
Das zieht sich über das ganze Array hin.

Woran liegt es?
Die Optimieroption des Compilers ist "0".

Vielen Dank und viele Grüße
Rahul

von Daniel V. (danvet)


Lesenswert?

Da du schon deutlich über 1000 Beiträge geschrieben hast, weisst du 
sicher, dass jetzt gleich die kaputten Glaskugeln kommen...

von array (Gast)


Lesenswert?

> "key" werden Werte zwischen 0 und 16 zugewiesen,
0-16 --> 17 Elemente
key-1 bei key =0 --> key=255

Zugriff auf Elemente ausserhalb des Arrays

von Justus S. (jussa)


Lesenswert?

array schrieb:
> 0-16 --> 17 Elemente
> key-1 bei key =0 --> key=255
>
> Zugriff auf Elemente ausserhalb des Arrays

er sagt ja, dass die 0 rausgefiltert wird...allerdings fände ich es auch 
intuitiver, das Array trotzdem mit 17 Elementen zu erstellen, an der 
0ten Stelle eben nur ein Dummywert...

von Rahul D. (rahul)


Lesenswert?

array schrieb:
> key-1 bei key =0 --> key=255
>
> Zugriff auf Elemente ausserhalb des Arrays

Wer lesen kann, ist klar im Vorteil. (Passiert mir aber auch ganz 
gerne).
Die 0 wird vor dem Array-Zugrff rausgefiltert.

Daniel V. schrieb:
> Da du schon deutlich über 1000 Beiträge geschrieben hast, weisst du
> sicher, dass jetzt gleich die kaputten Glaskugeln kommen...

Welche Paramewter fehlen noch?

von B. S. (bestucki)


Lesenswert?

Rahul Der trollige schrieb:
> "key" werden Werte zwischen 0 und 16 zugewiesen, wobei die 0
> herausgefiltert wird

Wenn der Rest genau so im Code steht wie in deinem Beitrag, wird hier 
der Fehler sein. Poste mal den Codeschnipsel, in dem du den Wert zuweist 
und prüfst.

von Justus S. (jussa)


Lesenswert?

Rahul Der trollige schrieb:
>> Da du schon deutlich über 1000 Beiträge geschrieben hast, weisst du
>> sicher, dass jetzt gleich die kaputten Glaskugeln kommen...
>
> Welche Paramewter fehlen noch?

alles? eigentlich sollte man immer ein kompilierbares Minimalbeispiel 
posten, bei dem der Fehler gerade noch auftritt...

von Daniel V. (danvet)


Lesenswert?

> Daniel V. schrieb:
>> Da du schon deutlich über 1000 Beiträge geschrieben hast, weisst du
>> sicher, dass jetzt gleich die kaputten Glaskugeln kommen...
>
> Welche Paramewter fehlen noch?

Aus drei Codezeilen sollen wir dir eine Lösung präsentieren?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Rahul Der trollige schrieb:
> Bei key = 1 ist xyz = 0 und bei key = 8 ist xyz = 132.

Dann hast du wahrscheinlich statt
1
xyz = PVWChannel[key-1];

dieses
1
xyz = PVWChannel[key-1]-1;

geschrieben.

von B. S. (bestucki)


Lesenswert?

Yalu X. schrieb:
> Dann hast du wahrscheinlich statt
>
>
1
xyz = PVWChannel[key-1];
>
> dieses
>
>
1
xyz = PVWChannel[key]-1;
>
> geschrieben.

Dann würde aber bei key==1 immernoch 1 dabei rauskommen.

von B. S. (bestucki)


Lesenswert?

Verhält sich das Programm korrekt, wenn du z.B.
1
xyz=PVWChannel[0];
schreibst?

Nachtrag:
Sorry Yalu. Hab dich im vorherigen Beitrag zitiert bevor du deinen 
Beitrag korrigiert hast.

von Rahul D. (rahul)


Lesenswert?

Yalu X. schrieb:
> Rahul Der trollige schrieb:
>> Bei key = 1 ist xyz = 0 und bei key = 8 ist xyz = 132.
>
> Dann hast du wahrscheinlich statt
> xyz = PVWChannel[key-1];
>
> dieses
> xyz = PVWChannel[key-1]-1;
>
> geschrieben.

nee. Dachte ich auch schon.

be stucki schrieb:
> Verhält sich das Programm korrekt, wenn du
> z.B.xyz=PVWChannel[0];schreibst?

in dem Fall sollte xyz = 1 sein. Ist aber 0.

von Justus S. (jussa)


Lesenswert?

verdammt, dann zeig doch endlich mal dein ganzes Programm bzw ein 
Minimalbeispiel! was ist denn daran so schwer?

von B. S. (bestucki)


Lesenswert?

Mach mal ein const vor dein Array und schau dir die Compilerwarnungen 
an. Evt. veränderst du irgendwo den Inhalt deines Arrays.

von Rahul D. (rahul)


Lesenswert?

be stucki schrieb:
> Evt. veränderst du irgendwo den Inhalt deines Arrays.

Danke! Das war's!

Das kommt dabei heraus, wenn man ein fünf Jahre altes Programm anfasst, 
von dem man ausgegangen ist, dass man es nie wieder ändern muss.

von Der kernige Ridschie (Gast)


Lesenswert?

Justus Skorps schrieb:
> array schrieb:
>> 0-16 --> 17 Elemente
>> key-1 bei key =0 --> key=255
>>
>> Zugriff auf Elemente ausserhalb des Arrays
>
> er sagt ja, dass die 0 rausgefiltert wird...allerdings fände ich es auch
> intuitiver, das Array trotzdem mit 17 Elementen zu erstellen, an der
> 0ten Stelle eben nur ein Dummywert...

"intuitiver", ich hör wohl nicht richtig?
Wohl eher verschwenderisch.
Mit wachsender Erfahrung dürfte es kein Problem sein, sich an einen 
Index von 0 bis (Anzahl der Element - 1) zu gewöhnen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.