was mache ich bei der C Matrix mit unsigned long falsch ? :confused:



  • Hallo zusammen,

    was mache ich bei der C Matrix mit unsigned long falsch ? 😕

    Ich benötige 90000 unsigned long Werte oder mehr welchen
    ich einen Wert unsigned long zuweisen kann.

    Beim Debuggen sieht erstmals alles ganz gut aus.

    C

    unsigned long **x; // extern
    ...
    void f_set(void)
    {
      x = (unsigned long **) malloc(90000);
      for (unsigned long i=0; i < 90000; i++)
       {
        x[i] = (unsigned long **) malloc(1);
        x[i][0] = 0;
       }
    }
    


  • Ich schätze mal daß du in der Anweisung
    x[i] = (unsigned long **) malloc(1);
    ein * zuviel geschrieben hast.



  • und noch 'was

    malloc(1) liefert nur ein Byte.

    Du mußt sowas wie

    malloc(sizeof(unsigned long)) benutzen. Allerdings weiß ich nicht mehr
    genau die Syntax. Auf jeden Fall sollte

    malloc(sizeof((unsigned long) 42))

    funktionieren.



  • Javaner schrieb:

    Ich schätze mal daß du in der Anweisung
    x[i] = (unsigned long **) malloc(1);
    ein * zuviel geschrieben hast.

    nein das stimmt schon so.

    ausserdem:
    irgendwas = malloc(sizeof(unsigned long) * 90000);
    ohne cast und so wie ich es geschrieben hab.



  • Danke, für die Hinweise.

    Hallo Javaner
    in der ersten Version habe ich wie gewohnt sizeof((unsigned long) verwendet.
    machte aber irgendwie auch Probleme. Du schlägst mir nun malloc(sizeof((unsigned long) 42)) vor. Warum muss man die 42 anfügen ?

    Hallo c.rackwitz
    Der doppelte Zeiger (**) bei x[i] = (unsigned long **) malloc(1);
    sollte schon passen. Es handelt sich ja um eine zwei dimensionale Matrix.

    1  2
    ======
    [0][0]
    [1][0]
    [n][0]
    Es wird hierbei über ** dem zweiten Zeiger den reservierten Speicher zugewiesen.
    

    Gruss
    Michael



  • Der doppelte Zeiger IST zu viel - die einzelnen Elemente der Matrix sind eindimensional (und sollten es auch bleiben).



  • CStoll schrieb:

    Der doppelte Zeiger IST zu viel - die einzelnen Elemente der Matrix sind eindimensional (und sollten es auch bleiben).

    recht haste. du kannst ziemlich gut fehler finden. solltest gewinn draus schlagen 😉


Anmelden zum Antworten