- Akku Tests und Balkonkraftwerk Speicher         
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
    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) );

  2. #2
    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.

  3. #3
    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.

  4. #4
    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) );
    ...

  5. #5
    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.

  6. #6
    HaWe
    Gast
    ahaaa... da könnte der seltsame Fehler begründet sein, das muss ich jetzt mal testen.


    aber zu guter letzt, auch hier wieder die sizeof-Sache....:
    Thema memcpy:

    wenn ich einen array auf einen anderen kopieren will, habe ich bei statischen arrays verwendet
    memcpy(array1, array2, sizeof(array2) );

    nun ist array1 statisch und array2 ist dynamisch alloziert (mein buf).
    geht das nun stattdessen so...
    memcpy(array1, buf, arrlen * sizeof(int16_t) );
    ...

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Solange sizeof(array1) <= arrlen * sizeof(int16_t) ist und array1 vom typ int16_t ist - ja.

  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
  •  

12V Akku bauen