[C/C++] assignment makes pointer from integer without a cast

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Mazen2004, 29. Juni 2012 .

  1. 29. Juni 2012
    Zuletzt bearbeitet: 29. Juni 2012
    assignment makes pointer from integer without a cast

    Code:
    unsigned short Norm(Image * inImg, Image * outImg)
    {
     int elements = inImg->width*inImg->height;
     transferData(inImg, outImg);
    
     int i;
     for(i = 0; i < elements; i++) {
     double upper = 255*((double) ((int)inImg->data[i] - (int)inImg->min));
     double lower = ((double) ( (int)inImg->depth - (int) inImg->min) );
    [B] outImg->data[i] = (byte) (upper/lower);[/B]
     }
    
     return 1;
    }
    
    Wie bekomme ich die warning weg? Zu was muss ich casten?
     
  2. 29. Juni 2012
    Zuletzt bearbeitet: 29. Juni 2012
    AW: assignment makes pointer from integer without a cast

    Hey!

    Dazu muesste man wissen, was fuer ein Array-Typ "outImg->data" ist.
    "outImg->data" muesste byte[] / byte* sein, um "(byte) (upper/lower);" aufnehmen zu koennen. Ich schaetze also, dass "outImg->data" eher *void[] / void** oder eine andere interne Datenstruktur ist.

    Der Fehler ergibt sich also daraus, dass einem Pointer (Element des data-Arrays) ein Integer zugewiesen wird.

    Edit: Tritt der Fehler tatsaechlich in der markierten Zeile auf? Es scheint mir auch etwas komisch, dass du "double * upper" bzw. "double * lower" (also jeweils einen Pointer auf einen double) definierst...

    Mfg,

    Kolazomai
     
  3. 29. Juni 2012
    AW: assignment makes pointer from integer without a cast

    hey!
    Code:
    typedef struct image
    {
     byte ** data;
    } Image;
    
    die * bei den doubles sind ausversehen reingerutscht nach dem kopieren. Also da sind keine :>
     
  4. 30. Juni 2012
    AW: assignment makes pointer from integer without a cast

    Hey!

    Dann ist es doch so, wie ich gesagt habe. "Image->data" ist ein Array auf byte-Pointers (bzw. ein weiteres byte-Array). Du weist einem Element von "Image->data" aber nur ein byte zu (keinen byte-Pointer!). Deshalb kriegst du die Warnung (Fehler).

    Loesung: Finde heraus, was in den Elementen von Image->data stehen soll. Will er nur die Adresse des bytes um es spaeter aendern zu koennen? Oder soll es tatsaechlich ein Array sein (um z.B. Farbinformationen oder aehnliches zu halten)?

    Mfg,

    Kolazomai
     
  5. 1. Juli 2012
    AW: assignment makes pointer from integer without a cast

    ich glaub es soll nur den adresse des bytes sein.
    Was muss ich dann an der zuweisung ändern? (byte*) casten geht ja auch nicht.
     
  6. 1. Juli 2012
    AW: assignment makes pointer from integer without a cast

    Hallo!

    2 Optionen:

    1.) Eine "static byte" Variable deklarieren und in diese dann den Wert schreiben und die Adresse via "&variable" uebergeben. Das hat den Nachteil, dass die Variable bei jedem Funktionsaufruf ueberschrieben wird, was du wahrscheinlich nicht willst.

    2.) Einen byte* Pointer erstellen, fuer diesen dann Speicher via "malloc()" in Groesse eines "byte" reservieren, in den Speicher dann das Ergebnis via "*variable" schreiben und den Pointer in "Image->data" uebergeben. Problem dabei ist, dass du den Speicher im Laufe des Programms wieder freigeben musst (ausser die Image-API macht das intern - eher unwahrscheinlich), sonst hast du ein memory leak in deinem Programm.

    Da beide Varianten nicht gerade optimal sind, schaetze ich mal, dass du dir nicht des Inhalts von "Image->data" ganz bewusst bist. API nochmal genau lesen und nicht nur "glauben"

    Mfg,

    Kolazomai
     
  7. 1. Juli 2012
    AW: assignment makes pointer from integer without a cast

    Image->data ist vorgegeben und da soll nichts geändert werden.

    Bleibt mir ja nur Variante 2... :/
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.