- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 32

Thema: C: Fragen zu memset, memcpy, malloc

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    jap, das mit free ist klar

    aber wenn man's nicht vergisst...?

    die Anschluss-Frage wäre auch:

    int16_t * buf;

    buf = (int16_t *) malloc(arrlen);
    oder:
    buf = (int16_t *) malloc(arrlen*sizeof(int16_t) );

    ...

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Zitat Zitat von HaWe Beitrag anzeigen
    jap, das mit free ist klar
    aber wenn man's nicht vergisst...?
    Spätestens wenn mehrere an einem Programm arbeiten, wird es irgendwann wer vergessen.

    Deshalb sieht es in modernem C++ jetzt so aus, statt
    Code:
    void f()
    {
        int* pi = new int;
    
         // ...
    
        delete pi;
    }
    nur noch
    Code:
    void f()
    {
         auto pi = std::make_unique<int>();
    
         // ...
    }
    gelöscht wird automatisch, wenn irgendwo (auch durch eine exception) die Klammern verlassen werden.


    Die Zusatzfrage überlasse ich dann mal den sicher bald erscheinenden C-Experten.

  3. #3
    HaWe
    Gast
    C++ ist für mich definitiv keine Option, ich hasse Objekte wie der Teufel das Weihwasser...

    a-Bär:

    wenn eins hiervon richtig ist, wäre das schon mal gut zu wissen
    (ich tippe aufs zweite...)


    buf = (int16_t *) malloc(arrlen);
    oder:
    buf = (int16_t *) malloc(arrlen*sizeof(int16_t) );

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Zitat Zitat von HaWe Beitrag anzeigen
    (ich tippe aufs zweite...)
    Würde ich auch vermuten, aber wie gesagt ich bin kein C-Experte.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Hallo HaWe,

    wie Du getippt hast:
    Code:
    size_t len = 8;
    
    int16_t *ptr = (int16_t*)malloc(arrlen * sizeof(int16_t));
    
    /* Oder wenn's mit 0 initialisiert sein soll: *)
    ptr = (int16_t*)calloc(arrlen, sizeof(int16_t));
    ist die richtige Antwort.

    Allerdings ist es dann üblich mittels Pointer Arithemetik und nicht mit dem Array-Operator auf das Feld zuzugreifen also drittes Element im Feld;
    Code:
    *(ptr + 2) = 32 * 27 + *(ptr + 1);
    ist aber Geschmackssache.

  6. #6
    HaWe
    Gast
    ok, super, danke - hatte ich beide getestet, Fehler besteht fort, dann liegt es nicht an malloc.

    calloc kannte ich noch gar nicht, und es beantwortet eigtl sogar schon die nächste Frage, trotzdem, der Vollständigkeit halber:

    wenn ich mit
    buf = (int16_t *) malloc(arrlen*sizeof(int16_t) );
    den array angelegt habe, wie kann ich ihn manuell (nachträglich) mit Null initialisieren?

    Jetzt geht es also um memset...
    ist das hier korrekt:
    memset(buf, 0, sizeof(buf) );
    ...

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Nein, so geht's nicht, genau darin unterscheiden sich Arrays mit vorgegebener Größe gegenüber Speicherblöcken die mittels malloc & Co angelegt werden.
    sizeof(buf) gibt die Bytes für die Größe des Zeigers buf zurück. Der weiß nix über das was malloc & free so treiben.
    Code:
    memset(buf, 0, arrlen * sizeof(int16_t));
    wäre korrekt.

    Du mußt hier zwischen der Feldlänge die Du vorgibst und der Anzahl der Bytes, die sich immer aus 'Feldlänge mal Datenentypgröße' ergibt, unterscheiden.

  8. #8
    HaWe
    Gast
    danke, mach ich so!

Ähnliche Themen

  1. Problem mit arrays in memset
    Von HaWe im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 05.06.2016, 11:39
  2. Tauchroboter (Fragen über Fragen)
    Von Michi Unfried im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 12
    Letzter Beitrag: 20.02.2014, 21:03
  3. Rasenmähroboter fragen zur lenkung und mehr fragen :-)
    Von andiwalter im Forum Staubsaugerroboter / Reinigungs- und Rasenmähroboter
    Antworten: 11
    Letzter Beitrag: 11.05.2009, 18:25
  4. miniparser + malloc + speicherproblem?
    Von PCMan im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 09.01.2009, 14:03
  5. Fragen über Fragen - Schrittmotor
    Von Karierteshorts im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 23.03.2005, 08:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests