Frage zu socket.h recv()



  • Danke,

    damit sind meine Fragen beantwortet.



  • char *f() {
    char buffer[50] = "Hallo, Welt";
    return buffer;
    }

    int main()
    {
    char *b; oder char *b = new char[50];
    *b = f();
    }

    achtung: nach dem aufruf der funktion f() muss buffer nicht mehr gueltig sein, d.h. b zeigt auf vermutlich was anderes.



  • Wie bzw. wieso kann ich dann überhaupt einen Zeiger zurückgeben, wenn dieser nach Beendigung der Funktion eh nicht mehr gültig ist?



  • Oh, hängt damit zusammen, daß du hier den Speicher statisch holst. Du gibst ja auch keinen Speicher frei, den du dir mit char bla[x]; geholt hast. Ich dachte, du hättest dir den über new bzw. malloc geholt.



  • Original erstellt von <egal>:
    achtung: nach dem aufruf der funktion f() muss buffer nicht mehr gueltig sein, d.h. b zeigt auf vermutlich was anderes.

    Vermutlich? Ganz sicher.. Wieso man das trotzdem machen darf? Keine Ahnung.. Mein Compiler gibt mir immerhin eine Warnung.



  • Vermutlich? Ganz sicher.. Wieso man das trotzdem machen darf? Keine Ahnung.. Mein Compiler gibt mir immerhin eine Warnung.

    wieso ganz sicher? der speicher wird doch nach dem funktionsaufruf nicht auf irgendwelche anderen werte zurueckgesetzt.



  • Das nicht, aber du hast nen Zeiger auf einen Speicherbereich der nicht dir gehört. Von daher ist der Buffer ganz sicher nicht mehr gültig.

    Aber ok, deine Formulierung war schon richtig.

    Es ist halt falsch so etwas zu machen.

    [ Dieser Beitrag wurde am 17.12.2002 um 14:21 Uhr von DrGreenthumb editiert. ]



  • Original erstellt von <pasti>:
    Wie bzw. wieso kann ich dann überhaupt einen Zeiger zurückgeben, wenn dieser nach Beendigung der Funktion eh nicht mehr gültig ist?

    am besten gar nicht, du übergist der funktiion einen zeiger auf bereits vorher reservierten speicher (und am besten auch die größe)

    int main()
    { char test = new char[100];
      int size = sizeof(test);
    
      foo(test, size);
    
      /* hier kannst du den veränderten test-speicher benutzen */
    
      delete[] test;
      return 0;
    }
    
    void foo(char *speicher, int size) 
    { /* Speicher verwenden bis max. size */
    }
    

    hoffe, hab mich jetzt nirgends wo vertippt...



  • @flosko:
    - test sollte wohl ein Zeiger sein.
    - sizeof() liefert dann aber die größe eines Zeigers zurück.



  • hoppla, hast recht, hab den stern vergessen...
    also:
    char *test = new char[100];

    ausserdem hatte ich vorher ein statisches array drinnen und hab dann gesehn, dass er's mit zeigern machen wollte, also weg mit dem sizeof()
    wenn man das array dynamisch vereinbart, muss man sowieso die länge wo festlegen (hier hald fix 100)


Anmelden zum Antworten