unint8_t array übergeben
-
Ich versuche ein Array an eine Funktion zu übergeben und das Array in der Funktion zu füllen. Danach will ich die Inhalte am Aufrufort verwenden:
bool Sensor_CHR6DM::empfangen(uint8_t stream[]) { ... std::cout << "Marker 1\n"; stream[0] = 's'; stream[1] = 'n'; stream[2] = 'p'; stream[3] = 0xb7; std::cout << "Marker 2\n"; ... } main() { ... uint8_t data[1000]; empfangen(data); ... }Leider gibt es FAST immer einen Speicherzugriffsfehler:
Marker 1
Speicherzugriffsfehler (Speicherabzug geschrieben)Sehr selten läuft es aber. Mache ich irgendwas falsch??
-
Klingt nach undefiniertem Verhalten. Was in deinem Fall nach Zugriffen außerhalb der Array-Grenzen klingt.
Also
int arr[30]; arr[30] = 12345; //Zugriffsfehler
-
Das kann ich glaub ausschließen.
Sobald ich mein Programm so ändere "läuft" es (macht halt keinen Sinn mehr..)bool Sensor_CHR6DM::empfangen(uint8_t streamALT[]) { uint8_t stream[1000]; ... std::cout << "Marker 1\n"; stream[0] = 's'; stream[1] = 'n'; stream[2] = 'p'; stream[3] = 0xb7; std::cout << "Marker 2\n"; ... } main() { ... uint8_t data[1000]; empfangen(data); ... }Es muss irgendwas mit dem Übergeben zu tun haben, bzw. dem weiteren Verwenden.
-
Ich habe den Fehler gefunden.
Die Funktion hatte früher das Array selbst deklariert. Nun habe ich sie so umgebaut dass sie das Array übergeben bekommt. In der Funktion wird zwei mal read() aufgerufen, und das nun so:bool Sensor_CHR6DM::empfangen(uint8_t stream[]) { ... int res = read((fd_seriell),stream,39);//Stream lesen ... int res = read((fd_seriell), &stream[4], 35); ... }Einmal möchte ich 39 Byte lesen und in den stream[] stecken, beim weiten Mal nur 15 und an der 4. Stelle anfangen.