[gelöst] Größe des allokierten Speichers ermitteln



  • Hallo, also folgendes ich schreib an ner kleinen Sammlung von Funktionen für Strings. Jedenfalls hab ich da ne Funktion StringAppend(..) die mir einen String an einen 2en dazuhängt. Das funktioniert ja soweit auch schon ganz gut, nur möchte ich (der Sicherheit wegen, weil ja auch Andere die Bibliothek benutzen könnten..) abfragen ob der Speicherplatz des ersten Strings, durch das dazuhängen nicht überschritten wird. Deshalb muss ich abfragen ob allozierterSpeicher(String1) < aktuellerSpeicher(String1) + aktuellerSpeicher(String2), den aktuellenSpeicherbedarf krieg ich ja mit sizeof(..), aber wie krieg ich die Größe des allokierten Speichers, gibts dazu ne Funktion?

    Hier mein Code für das StringAppend():

    void StringAppend(char * dest, char * append)
    {
     /*
        AppendString appends the append arg string to the existing dest arg String.
     */
    
    int l1 = StringLength(dest)+1; // +1.. for termination char
      int l2 = StringLength(append)+1; // +1.. for termination char
    
     if(sizeof(dest) < ( (sizeof(char)*l1-1) + sizeof(char)*l2) )
     {
       printf("\n Error: Destination String have too less allocated memory, to store Append-String!");
     }
     else
     {
      for(int i = 0; i < l1; i++)
      {
       dest++;
       printf("\n%c",(*dest));
      }
    
      for(int i = 0; i < l2; i++)
      {
        (*dest) = append[i];
           dest++;
      }
    
      (*dest) = '\0';
    
      for(int i = 0; i < (l1+l2) ; i++)
      {
          dest--;
      }
    
     }
    
    }
    

    Bin sehr dankbar für jede Hilfe!



  • Sowas geht nicht. Du müsstest die Größen mit in die Funktion übergeben. Sobald du aus der Funktion raus bist, wo du die Größe festgelegt hast, kannst du nicht mehr abfragen wie groß sie sind. Aus diesem Grund gibt es ja die terminierende 0 in Strings.

    sizeof(char) ist per Definition übrigens immer 1, das kannst du also weglassen.



  • hmm jap stimmt, wäre es vlt ne gute Idee wenn ich die Speicher von dest einfach mit einem realloc(), auf die notwendige Größe bringe?



  • Ok, wollt nur noch sagen hab das ganze jetzt mit realloc() gelöst, ist wahrscheinlich sogar besser, weil sich der Benutzer jetzt nicht darum kümmern muss dass er genug Speicher reserviert hat.

    Hab jetzt einfach statt der If-Abfrage folgendes:

    dest = realloc(dest,sizeof(dest)+sizeof(append)-1);
    

    Schade irgendwie, wollte sogern ne Fehlermeldung rausschmeissen 😃



  • nimm doch einfach strcpy() oder memcpy() und bau dir da kein monster zusammen...

    lg lolo



  • das Problem ist das mich mein Lehrer mit der Erstellung dieses "Monsters" beauftragt hat, was natürlich heißt das ich es machen muss.
    Es geht darum zu verstehen wie diese methoden funktionieren und sie nachzuimplementieren.



  • KnufflPuffl schrieb:

    dest = realloc(dest,sizeof(dest)+sizeof(append)-1);
    

    falsche realloc anwendung. Siehe http://www.c-plusplus.net/forum/viewtopic.php?t=206606


Anmelden zum Antworten