dynamische Speicherallokierung



  • Hallo ich wollte etwas fragen,und zwar :

    Kann man ,wenn man einen Ausdruck hat ,z.b
    void funktion(struct Image *In,struct Image *Out,struct Image *Mask)
    {
    unsigned char *tmp
    .....
    .....

    tmp=Out->Data+i*Out->ows +j;
    tmp=(unsigned char )val;
    }
    fuer den Ausdruck oder fuer tmp Speicher dynamisch allokieren ,wenn ja wie?

    Eine zweite Frage ist :Was bedeutet eigentlich die folgende Zeile:

    im= *(berechnung von etwas);

    Was hat es mit Zeigerarithmetik zu tun ?

    Danke
    kilomat



  • Dynamisch Speicher allokieren kannst Du mit der Funktion malloc(). Allerdings musst Du den Speicher nachher selbst wieder mit free() freigeben, sonst enstehen Speicherlöcher.

    Zur zweiten Frage:
    Die Zeile bedeutet, dass 'im' der Wert zugewiesen wird, der sich an der in der Klammer ausgerechneten Speicheraddresse befindet.
    Zeigerarithmetik würde ich einfach einfach mal als 'rechnen' mit Zeigern bezeichnen. Du addierst z.B. eine drei zu einem Zeiger dazu und dieser zeigt (unter Berücksichtigung des Datentyps) dann drei Speicherstellen weiter als er es ursprünglich getan hat.



  • Danke fuer die Antwort,aber
    koenntest du mir genau sagen(auf die es´rste Frage) wie ich das machen soll ,ich meine tmp=(unsigned char*)malloc(AUSDRUCK ?) oder wie?
    Danke
    kilomat



  • Wenn Du z.B. für 10 unsigned chars Speicher reservieren willst, musst Du das folgendermaßen machen:

    int anzahl = 10;
    tmp = malloc(sizeof(unsigned char) * anzahl);
    


  • Ich dachte man soll den void Pointer von malloc nicht casten 😕



  • Ja, hast recht, ich ändere das. (Hab gerade noch mal gesucht, wegen der Begründung: http://www.c-plusplus.net/forum/viewtopic.php?t=57230&highlight=malloc+cast+void)

    Allerdings weigert sich der VC++ bei mir, code mit malloc() ohne expliziten cast zu übersetzen...



  • Asgard schrieb:

    Allerdings weigert sich der VC++ bei mir, code mit malloc() ohne expliziten cast zu übersetzen...

    Probier mal den Code als C Code zu kompilieren.
    In C++ ist der Cast nämlich nötig.



  • Probier mal den Code als C Code zu kompilieren

    @Shade: Thx, ich wusste bisher gar nicht, dass das bzw. wie das geht, da ich nur die Autoren-Edition habe und mich bis jetzt nie wirklich mit der Online-Hilfe (und mit den ganzen Optionen) auseinandergesetzt habe.


Anmelden zum Antworten