malloc() in funktionen



  • cd9000 schrieb:

    ZuK schrieb:

    char *buffer = (char *) malloc(10); // buffer zeigt jetzt auf speicher am heap;
    

    Ist der cast nicht überflüssig?

    Manche IDE´s wie Visual Studio meckern, wenn man den cast nicht angibt.
    Sonst ist er überflüssig.



  • diese C++ programmierer immer - kennen nicht mal long long 😉 - der cast ist sinnlos



  • curry-king schrieb:

    cd9000 schrieb:

    ZuK schrieb:

    char *buffer = (char *) malloc(10); // buffer zeigt jetzt auf speicher am heap;
    

    Ist der cast nicht überflüssig?

    Manche IDE´s wie Visual Studio meckern, wenn man den cast nicht angibt.

    Die IDE meckert? Ich dachte dafür wäre der Compiler zuständig? 😕

    Außerdem meckert der C-Compiler von MS Visual Studio afaik nicht, wenn der cast fehlt.



  • cd9000 schrieb:

    curry-king schrieb:

    cd9000 schrieb:

    ZuK schrieb:

    char *buffer = (char *) malloc(10); // buffer zeigt jetzt auf speicher am heap;
    

    Ist der cast nicht überflüssig?

    Manche IDE´s wie Visual Studio meckern, wenn man den cast nicht angibt.

    Die IDE meckert? Ich dachte dafür wäre der Compiler zuständig? 😕

    Außerdem meckert der C-Compiler von MS Visual Studio afaik nicht, wenn der cast fehlt.

    Nagut, der Compiler von MS Visual Studio.... Aber er meckert trotzdem!

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    	char *c;
    
    	c=malloc(sizeof(char));
    
    	*c='a';
    
    	printf("%c\n", *c);
    
    return 0;
    }
    
    --------------------Konfiguration: Cpp1 - Win32 Debug--------------------
    Kompilierung läuft...
    Cpp1.cpp
    C:\Dokumente und Einstellungen\michi\Desktop\Neuer Ordner\Cpp1.cpp(9) : error C2440: '=' : 'void *' kann nicht in 'char *' konvertiert werden
            [b]Konvertierung von 'void*' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung[/b]
    Fehler beim Ausführen von cl.exe.
    
    Cpp1.exe - 1 Fehler, 0 Warnung(en)
    

    Mit cast gibts keine Meldungen!



  • Trotzdem meckert nicht der c-compiler sondern der c++ compiler. wenn mich nicht alles täuscht dann erkennt die vc-IDE an der file-extension ( bei dir .cpp ) welcher compiler verwendet wird ( ändere mal die extension auf .c und der compiler wird aufhören zu meckern ).
    Andererseits ist es wirklich nicht einfach nachzuvollziehen was wann aus der VC-IDE aufgerufen wird. Ich habe vor einiger zeit einmal den linker von vc gesucht und keinen gefunden.( microsoft-magic ? ).
    Kurt



  • ok, danke für die Klarstellung!



  • free() nicht vergessen



  • ZuK schrieb:

    char *buffer = (char *) malloc(10); // buffer zeigt jetzt auf speicher am heap;
    

    Ist der cast nicht überflüssig?

    soweit ich weiß ist er in C überflüssig aber nicht in C++.

    zur eigentlichen frage: besser ist es, wenn der speicher in der selben funktion freigegeben wird in der er alloziert wurde:

    char *test(char *buffer)
    {
      strcpy(buffer,"testwert");    // kopiere konstanten string nach buffer
      return buffer;                // gib den ort am heap zurück;
    } 
    
    int main()
    {
      char *a=(char*)malloc(10);    // buffer zeigt jetzt auf speicher am heap;
      test(a);                      // kopiere konstanten string nach a
      do_some_thing(a);             // verwende a
      free(a);                      // speicher freigeben
    }
    


  • ja und genau das ist ja mein problem: ich find es z.b. sehr lästig und nicht grad guten stil wenn man eine funktion aufruft und sich dann auch noch darum kümmern muss den speicher wieder freizugeben. kann man das nicht noch irgendwie anders machen?
    mit der static variable meinte ich, dass man ein char array als static in der funktion deklariert und darauf den pointer zurückgibt. aber das find ich auch nicht als optimale lösung... 😕
    gibt es denn keine "richtige" möglichkeit einen string bzw ein char array zurückzugeben?



  • Konfusius schrieb:

    ZuK schrieb:

    char *buffer = (char *) malloc(10); // buffer zeigt jetzt auf speicher am heap;
    

    Ist der cast nicht überflüssig?

    soweit ich weiß ist er in C überflüssig aber nicht in C++.

    Bingo. Schau mal auf den Titel dieses Unter-Forums. 🙂


Anmelden zum Antworten