Auf Array einer Klasse zugreifen
|
25.11.2020, 15:55
Beitrag #9
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
(25.11.2020 15:28)Nichtraucher schrieb: byte buffer1[24][24]; Das Element buffer1[24][24] existiert nicht. Bei einer Arraylänge von 24 läuft der Index von 0 bis 23! Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
25.11.2020, 16:05
Beitrag #10
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
(25.11.2020 15:28)Nichtraucher schrieb:Offensichtlich überschreibst Du da was durch falsche Array-Indizes. Daraufhin solltest Du deinen Code mal überprüfen. Dass es buffer1[24][24] nicht gibt, hat Dir Tommy ja schon erklärt. Gruß, Franz-Peter |
|||
25.11.2020, 16:41
Beitrag #11
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
Zitat:Das Element buffer1[24][24] existiert nicht. Bei einer Arraylänge von 24 läuft der Index von 0 bis 23! Hey, das stimmt natürlich! Ist aber nicht das Problem, was ich habe. Das war ein Beispiel und da hat sich nun doch noch so ein Fehler eingeschlichen. ![]() Ich hatte die Vermutung, dass irgendwas beim Datenzugriff nicht stimmt. Da ich so weit alles ausgeschlossen habe, habe ich dann die Arrays in der Reihenfolge vertauscht. Macht ja eigentlich nix oder? - Falsch gedacht! Das Ergebnis ist, dass meine Daten in den Arrays nun durcheinander kommen. Ich schreibe in die Arrays teilweise auch so direkt rein, also ohne den Umweg über eine Methode der Klasse, die ich dafür als Schnittstelle verwende. Ich habe das nun ausprobiert , dass ich auch beim Hineinschreiben nicht den direkten Weg gehe (bla.blob[x] = y), sondern über eine Methode, der die Daten übergeben werden und die sie dann in das Array schreibt. Trotzdem ich die Arrays in der Reihenfolge vertausche, bekomme ich keinen Datensalat mehr. Nun werde ich wohl alle Variablen über eine Methode lesen und schreiben. Bevor ich noch mehr Überraschungen bekomme. Nachvollziehen kann ich das aber nicht. Zumal mir die Arduino-IDE keine Fehler oder Warnungen anzeigt. (eingeschaltet sind Fehler und Warnungen, manchmal werden auch Warnungen angezeigt oder eben Fehler, insofern die erkannt werden). Jetzt schaue ich wieder, was Ihr geschrieben habt... Gruß[/quote] |
|||
25.11.2020, 16:53
Beitrag #12
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
(25.11.2020 16:41)Nichtraucher schrieb: Nachvollziehen kann ich das aber nicht. Zumal mir die Arduino-IDE keine Fehler oder Warnungen anzeigt.Für die Behandlung von Arrays bist allein Du selbst verantwortlich. Da führt der Compiler keinerlei Prüfungen durch. Das ist ein weiterer Vorteil von Methoden - dort kann man prüfungen auf Arraygrenzen durchführen. Wenn Du auf ein zweidimensionales Array unbedingt von außen zugreifen musst, dann musst Du die innere Dimension festlegen, z.B. als Typdeklaration: Code: typedef uint16_t zeile_t[24]; // innere Struktur 24 Elemente Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
25.11.2020, 18:21
Beitrag #13
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
Manche Sachen erkennt der Compiler. Wenn Du in einer Schleife einen zu großen Endwert hast (i=0; i< 32; i++), das Array also kleiner dimensioniert wurde (z.B. nur 30 Bytes umfasst). Ich habe mehrmals irgendwann die Größe geringfügig geändert und vergessen, den Wert für den Schleifenzähler anzupassen, da bin ich dann öfter über "kuriose" Fehlermeldungen gestolpert.
Mit C habe ich es nicht so. Ist nicht meine bevorzugte Sprache. Im Laufe der Zeit hatte ich aber schon mit allem möglichen zu tun: ein paar Jahre Maschinensprache und Basic auf dem C64, GW-Basic und überwiegend Maschinensprache auf dem PC (286er bis 486er) TASM, MASM für ca. 15 Jahre, dann kamen JavasScript und Java, dann nebenbei immer irgendwie ein wenig C (was ich aber immer grausig fand), PHP hat mich eine Zeit beschäftigt, HTML, dann wieder etwa 12 Jahre später, vor einigen Jahren C++ und Arduino. In C++ kann ich noch eine Menge mitnehmen. Zeiger etc. sind für mich i.R. noch immer ein rotes Tuch. Obwohl, so langsam kommt das, aber langsam.. Oben in Deinem Quelltext hast Du geschrieben: Code: zeile_t *getArr() Wie gesagt, mit Zeigern habe ich es noch nicht so. Aber so wie es aussieht, bekommst Du so zur Laufzeit einen Zeiger auf das Array? Das könnte noch funktionieren. Vielleicht probiere ich das demnächst mal aus. Danke auf jeden Fall für Eure Hilfe! Gruß |
|||
25.11.2020, 18:32
Beitrag #14
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
Kurz gesucht und gefunden:
aggressive-loop-optimization aggressive-loop-optimizations is a new type of optimization that's used by gcc when the limits are constant, as in this case. Undefined behavior is usually either variable overflow or array index overrun. However, the code seems to be correct. |
|||
25.11.2020, 18:36
Beitrag #15
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
Merksatz: Der Name eines Arrays ist ein Zeiger auf sein erstes Element.
Deine Fehlermeldungen kommen irgendwo anders her, denn eine Prüfung auf Arraygrenzen gibt es einfach nicht. Punkt. Außer dem C64 habe ich das auch weitgehend gemacht, aber auch 10 Jahre produktiv ANSI-C. Zu C++ bin ich erst wieder durch den Arduino gekommen. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
25.11.2020, 19:59
(Dieser Beitrag wurde zuletzt bearbeitet: 25.11.2020 20:04 von Nichtraucher.)
Beitrag #16
|
|||
|
|||
RE: Auf Array einer Klasse zugreifen
Hier ein Beispiel in der Arduino-IDE:
Code: int meinarray[30]; und die dazugehörigen Compilermeldungen: Code: D:\Arduino......\bla.ino: In function 'void setup()': Die Ursache für diese Meldung ist "i<36", damit ginge der Index in der Schleife über die Array-Grenze hinaus. Gruß |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste