2 Dimensionale Arrays übergeben



  • Hallo,

    habe mit C++ folgendes Problem, ich möchte folgendes Array:

    static ellsiCanIdRange idRange[] = 
            {
              {0, 0x10},
              {0x40, 0},
              {0x100, 0x17f},
              {0x200, 0x37f},
              {0x20000000, 0}         // Enable all 29-Bit CAN-ID's
            };
    

    an eine Funktion einer Klasse übergeben, die dann wiederum eine andere Funktion aufruft:

    bool CEllsi::setIdRange(ellsiCanIdRange *IdRange, int EnableDelete)
      {   
    ....
    this->status = ellsiCanIds(this->sockState, &this->socket, 2500, IdRange, sizeof(IdRange) / sizeof(ellsiCanIdRange), EnableDelete);
    ....
    }
    
    int ellsiCanIds(int sock, struct sockaddr_in *psai, uint32_t timeoutMs, ellsiCanIdRange *pidr, int entries, int del)
    {
    ...
    }
    

    Rufe ich die Funktion ellsiCanIds direkt aus der main Funktion auf und übergebe ihr das Array idRange funktioniert die Funktion ellsiCanIds perfekt, gehe ich den Umweg über die Klassenfunktion, haut die Funktion ellsiCanIds nicht mehr hin.

    Weiß jemand woran das liegt?

    Beste Grüße


  • Administrator

    In der Funktion setIdRange ist IdRange nur noch ein Zeiger auf einen Speicherblock. sizeof(IdRange) gibt somit die Grösse des Zeigers zurück (unter 32 Bit Systemen 4) und nicht die Grösse des Arrays. Ein Array und ein Zeiger sind zwei unterschiedliche Dinge.

    Grüssli



  • Hi,

    danke für die schnelle Antwort, dereferenzieren des Zeigers würde abhilfe schaffen?

    Viele Grüße


  • Administrator

    AndreasPietruschka schrieb:

    danke für die schnelle Antwort, dereferenzieren des Zeigers würde abhilfe schaffen?

    Nein, überleg doch mal, worauf der Zeiger zeigt. Auf ein einzelnes Objekt. Das da mal ein Array war, ist in der Funktion nicht mehr bekannt. C Arrays sind sehr flüchtig. Man arbeitet normaleweise mit einem Zeiger auf ein Array und die Grösse gibt man jeweils als zusätzlichen Parameter mit.

    In C++ verwendet man allerdings meistens C++ Container, da diese deutlich einfacher zu verwenden sind. Nur so als Randbemerkung 😉

    Grüssli




Anmelden zum Antworten