Rückgabe von Zeigern auf Daten



  • Hi!

    Ich habe hier eine Funktion die i.e. folgendes tut:

    -speicher mit malloc reservieren, typ unsigned long
    -zeiger auf diesen speicherbereich zurückgeben

    unsigned long* getMem()
    {
      unsigned long *ptr;
      ... malloc...
     return ptr;
    }
    

    nun weiß ich im aufrufenden Programm ja nicht, wie groß der Speicher ist, der für den zurückgegeben Zeiger reserviert wurde. Wie kann ich das feststellen?

    Ich kann hier (aus bestimmten Gründen) nicht mir call-by-refernce parametern etc arbeiten, bin also *nur* auf den Zeiger angewiesen!

    Danke 🙂



  • Du übergibst ja malloc einen Parameter - die gewünschte Größe.
    Diesen Speicher kriegst du, oder nicht. Also nicht etwa weniger.
    Dazwischen gibt es nichts.

    Also weißt du doch, wie groß der Speicherbereich ist. 😕



  • SeppSchrot schrieb:

    Du übergibst ja malloc einen Parameter - die gewünschte Größe.
    Diesen Speicher kriegst du, oder nicht. Also nicht etwa weniger.
    Dazwischen gibt es nichts.

    Also weißt du doch, wie groß der Speicherbereich ist. 😕

    nein net unbedingt!

    sagen wir, die funktion bekommt die Größe irgendwo her, egal wo .. also die größe ist zur compilzeit nocht nicht festgelegt. Dann weiß ich sie nicht !



  • 🙄
    Dann hast du sie doch aber ganz bestimmt in einer Variablen, oder?



  • nein auch net 😉

    um es kurz zu machen: Die Funktion existiert nicht in er "C- Welt" vielmehr ist sie eine Methode einer Java Klasse, die über JNI (Java Native Interface) aufgerufen wird. Daher auch keine call-by-refernce parameter, die ich nutzen kann, da Java das nicht kann ψ



  • intern weiss das programm (besser gasgt das os) wie groß der reservierte speicher ist. Beim neuen c++(ich weiss das ich im ansi-c forum bin) streiten sie darum ob man das erfahren darf wie groß der reservierte speicher ist
    D.h es gibt keine möglichkeit das nachträglich herauszufinden. Vieleicht kannst du mehr mit dem java anfangen
    mfg



  • blackwinged schrieb:

    um es kurz zu machen: Die Funktion existiert nicht in er "C- Welt" vielmehr ist sie eine Methode einer Java Klasse, die über JNI (Java Native Interface) aufgerufen wird. Daher auch keine call-by-refernce parameter, die ich nutzen kann, da Java das nicht kann ψ

    Naja, welche Parameter übergibst Du denn malloc? Mehr darfst Du auf keinen Fall lesen/beschreiben.

    Ansonsten: Was sind das für Daten? Gibt es irgendein Zeichen, daß erwiesenermaßen nicht Teil dieser Daten sein kann. Dann kannst Du das als Endmarker benutzen.



  • Daniel E. schrieb:

    blackwinged schrieb:

    um es kurz zu machen: Die Funktion existiert nicht in er "C- Welt" vielmehr ist sie eine Methode einer Java Klasse, die über JNI (Java Native Interface) aufgerufen wird. Daher auch keine call-by-refernce parameter, die ich nutzen kann, da Java das nicht kann ψ

    Naja, welche Parameter übergibst Du denn malloc? Mehr darfst Du auf keinen Fall lesen/beschreiben.

    Ansonsten: Was sind das für Daten? Gibt es irgendein Zeichen, daß erwiesenermaßen nicht Teil dieser Daten sein kann. Dann kannst Du das als Endmarker benutzen.

    das sind daten eins public/private keys z.b. oder sonstwas. irgendwas eigtl *g*
    also kann ich leider gar nix setzen an Marker oder so.

    Ich kann natürlich eine neue Klasse in Java dafür entwerfen, aber das finde ich doch etwas überdimensioniert. Vielleicht gehts aber auch net anders *seufz* Ψ



  • Kannst du denn nicht _in_ dem Speicherbereich die größe notieren?


Anmelden zum Antworten