malloc in einer Funktion



  • Hallo!

    Variablen verlieren beim Verlassen der Funktion ihre Gültigkeit. Trifft das auch auf malloc zu? Beispiel:

    int main ()
    {
      FILE * fp;
      char * string_p;
    
      get_string (fp, string_p);
    
      printf ("%s", string_p);
    
      return (0);
    }
    
    void get_string (FILE *fp, char *string_p)
    {
       size_t len = 0;
       i = 0;
    
       /* stellt die Länge des Strings fest */
       while (getc(fp) != EOF)
       {
         ++len;
       }
    
       /* reserviert Speicher dafür */
       string_p = (char *)malloc((len+1) * sizeof(char));
    
       while ((c = getc(fp)) != EOF)
       {
         string_p[i] =  c;
         ++i;
       }
       string[++i] = '\0';
    }
    

    Wird die Funktion printf mir den korrekten String ausgeben?

    Gruß
    Michael



  • Hallo!

    Also nach verlassen der Funktion werden tatsächlich die Variablen nicht übernommen (es sei sie sind global definiert!)

    Bei malloc ist es ähnlich. Der einzige Unterschied ist, dass der Speicher reserviert bleibt, ohne dass man auf ihn zugreifen kann.

    Hier für deine Methode musst du den String als Übergabeparameter übergeben, ansonsten geht dir der Speicher für immer verloren (bis zum beenden des Hauptprogramms)

    also hoffe ich konnte das klären?


Anmelden zum Antworten