Werbung
Nun, es ist der Anfang vieler Speicherlöcher.
So fängt es an
und nach der nächsten Überarbeitung sieht es dann so aus:Code:void Schlump() { //... ding = malloc(irgendwas); // ... // Hoffentlich free(ding); }
Code:void Schlump() { //... ding = malloc(irgendwas); if (irgendwas()) { // ... return; // Huch, ham wa da nich was vergessen } // ... // Hoffentlich free(ding); }
Spätestens wenn mehrere an einem Programm arbeiten, wird es irgendwann wer vergessen.
Deshalb sieht es in modernem C++ jetzt so aus, statt
nur nochCode:void f() { int* pi = new int; // ... delete pi; }
gelöscht wird automatisch, wenn irgendwo (auch durch eine exception) die Klammern verlassen werden.Code:void f() { auto pi = std::make_unique<int>(); // ... }
Die Zusatzfrage überlasse ich dann mal den sicher bald erscheinenden C-Experten.
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) );
Hallo HaWe,
wie Du getippt hast:
ist die richtige Antwort.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));
Allerdings ist es dann üblich mittels Pointer Arithemetik und nicht mit dem Array-Operator auf das Feld zuzugreifen also drittes Element im Feld;
ist aber Geschmackssache.Code:*(ptr + 2) = 32 * 27 + *(ptr + 1);
Lesezeichen