INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
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];

//buffer1[24][24] ist irgendwann mit 0x01 belegt, der Wert steht dort drin, das wurde verifiziert

[/code]

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)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.11.2020, 16:05
Beitrag #10
RE: Auf Array einer Klasse zugreifen
(25.11.2020 15:28)Nichtraucher schrieb:  
Code:
//Hier ein Beispiel, wie ich es verwenden würde, mit Ergebnis dazu

//buffer2[4] ist irgendwann mit 0xffaa belegt, der Wert steht dort drin, das wurde verifiziert
//buffer1[24][24] ist irgendwann mit 0x01 belegt, der Wert steht dort drin, das wurde verifiziert
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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. Sad

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]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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

class Test {
  public:
    zeile_t *getArr() {
      return arr;
    }
  private:
    zeile_t arr[24];
};

Test test;
void setup() {
  Serial.begin(115200);
  Serial.println("\nStart");
  Serial.println("Test");
  zeile_t *p = test.getArr();
  p[11][11] = 33;
  Serial.println(p[11][11]);
}

void loop() {}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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()
{
      return arr;
}

und ...

zeile_t *p = test.getArr();
  p[11][11] = 33;

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ß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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];
void setup() {
for (int i=0; i<36; i++)meinarray[i]=0;
}
void loop{}

und die dazugehörigen Compilermeldungen:

Code:
D:\Arduino......\bla.ino: In function 'void setup()':

D:\Arduino....\bla.ino:28:41: warning: iteration 30u invokes undefined behavior [-Waggressive-loop-optimizations]

   for (int i=0; i<36; i++)meinarray[i]=0;

                                         ^

D:\Arduino....\bla.ino:28:3: note: containing loop

   for (int i=0; i<36; i++)meinarray[i]=0;

   ^

Die Ursache für diese Meldung ist "i<36", damit ginge der Index in der Schleife über die Array-Grenze hinaus.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Zweidimensionales Array Bitklopfer 15 951 09.06.2021 14:45
Letzter Beitrag: GuaAck
  Messwerte im Array süffi1234 19 1.568 09.12.2020 17:18
Letzter Beitrag: Guekard
  Verständnisfrage 2D Array hugofant 2 629 06.10.2020 07:35
Letzter Beitrag: hugofant
  NRF24I01 Empfangenen Text in einer Var. speichern zebrazehn 10 1.531 19.09.2020 12:54
Letzter Beitrag: hotsystems
  Batterie Innenwiderstand messen - If, Else in einer If, Else Anweisung Wuschi 32 4.431 15.08.2020 11:22
Letzter Beitrag: Franz54
  Eine Frage zu einer neuen ino Datei Elly 22 3.152 01.06.2020 19:59
Letzter Beitrag: Elly
  Array Werte in einen String ChriscoGT 3 1.313 12.05.2020 15:41
Letzter Beitrag: Tommy56
  Frage zum richtigen verwenden einer Funktion Gerdchen03 3 1.367 10.04.2020 19:37
Letzter Beitrag: Tommy56
  Array Harry 6 1.248 03.04.2020 20:06
Letzter Beitrag: Tommy56
  Probleme mit externen Librarys in Klasse reichs 3 1.128 30.03.2020 22:12
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste