malloc nötig?



  • Hi!

    Ich bin mir grad etwas unsicher. Ich habe folgende Funktion:

    void foo(char* string){}

    muss ich für string noch speicher mittels malloc allocieren, oder kann ich jetzt schon herrlich und ohne probleme mit meinem char* arbeiten?

    vielen dank schonmal



  • ich tippe mal, dass kein malloc nötig ist.... schließlich brauche ich in der main(int argc, char* argv[]) auch kein malloc, um mit den argumenten arbeiten zu können....



  • kommt darauf an.
    ein char* muss immer auf irgendetwas zeigen, sonst gibts probleme.

    char* p;
    *p=5;
    das geht nicht gut.

    char c;
    char* p=&c;
    *p=5;
    das geht gut

    char* p=malloc(1);
    *p=5;
    free(p);
    das geht auch gut.

    vielleicht solltest du dir ein tutorial durchlesen? http://pw1.netcom.com/~tjensen/ptr/pointers.htm



  • Du übergibst der Funktion ja die char Werte/Variable.

    void func( char *str ) {
         // String hat nun eine Länge von 6 Zeichen.
         // Speicher Grösse 6 Byte
         // Zeiger Grösse 4 Byte
    }
    
    int main( int argc, char *argv[] ) {
       func("Hallo");
       return 0;
    }
    

    mfg



  • Original erstellt von ciever2k:
    **```
    void func( char *str ) {
    // String hat nun eine Länge von 6 Zeichen.
    // Speicher Grösse 6 Byte
    // Zeiger Grösse 4 Byte
    }

    man kann auch
    char* p;
    func(p);
    machen...

    aber achtung:
    String ist bei dir 5 Zeichen lang
    und die Zeigergröße ist nirgends definiert.
    sizeof (char*) muss nicht 4 sein.



  • Danke für die Antworten! Wie das mit malloc & co funktioniert habe ich schon verstanden, wuste nur nicht mehr, ob beider übergabe eines char* an eine funktion für dieses char* schon speicher allokiert wird oder nicht. ich denke nun ists aber klar 🙂

    merci nochmal!



  • Hallo,

    nein, die Funktion allokiert nirgends speicher. Der Zeiger, den Du übergibst, zeigt auf einen Speicherbereich, den Du schon im Hauptprogramm reseviert hast. Daher arbeitest Du auch in der Funktion nicht mit einer Kopie, sondern mit den Original

    void funk(char *x)
           {
               strcpy(x,"Hallo");
           }
           int main(){
               char x[10]="nichts";
    
               printf(x);
               funk(x);
               printf(x);
            return 0;
           }
    

    gibt "nichts" und "Hallo" aus, obwohl die Funktion keinen Rückgabewert hat.

    grüße Con@n


Anmelden zum Antworten