Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

malloc vs. calloc: Wichtige Unterschiede mit praktischen Beispielen erklärt

Was ist dynamische Speicherallokation?

Dynamische Speicherallokation ermöglicht es einem Programm, zur Laufzeit Speicher anzufordern und freizugeben. In C stellt die Standardbibliothek vier Hauptfunktionen dafür bereit: malloc(), calloc(), realloc() und free() – alle deklariert in stdlib.h.

malloc(): Einzelnen Speicherblock allokieren

malloc() (kurz für „memory allocation“) reserviert einen zusammenhängenden Block von Bytes und gibt einen Zeiger auf das erste Byte zurück. Der Inhalt des neu allokierten Blocks ist undefiniert (enthält zufällige Bitmuster).

Typische Verwendung:

int *p = (int *)malloc(n * sizeof(int));

Schlägt die Anfrage fehl, gibt malloc() NULL zurück.

calloc(): Mehrere null-initialisierte Blöcke allokieren

calloc() (kurz für „contiguous allocation“) nimmt zwei Argumente entgegen: die Anzahl der Elemente und die Größe jedes Elements. Es allokiert Speicher für alle Elemente und setzt jedes Byte automatisch auf null – ideal für Arrays oder Strukturen, die einen sauberen Startzustand benötigen.

Typische Verwendung:

int *p = (int *)calloc(n, sizeof(int));

Wie malloc() gibt es NULL zurück, falls die Allokation fehlschlägt.

Wann welche Funktion verwenden?

Syntax-Übersicht

malloc()

void *malloc(size_t size);

calloc()

void *calloc(size_t num, size_t size);

Praktische Code-Beispiele

Beispiel 1: malloc() für 15 Integer

#include <stdlib.h>
#include <stdio.h>
int main(void) {
    int *ptr = malloc(15 * sizeof(*ptr));
    if (!ptr) {
        perror("malloc fehlgeschlagen");
        return EXIT_FAILURE;
    }
    ptr[5] = 480; // 6. Element (0-basierter Index)
    printf("Wert des 6. Integer ist %d\n", ptr[5]);
    free(ptr);
    return EXIT_SUCCESS;
}

Ausgabe: Wert des 6. Integer ist 480

Beispiel 2: calloc() für Summenberechnung

#include <stdlib.h>
#include <stdio.h>
int main(void) {
    int *ptr = calloc(10, sizeof(int));
    if (!ptr) {
        perror("calloc fehlgeschlagen");
        return EXIT_FAILURE;
    }
    int sum = 0;
    for (int i = 0; i < 10; ++i) {
        ptr[i] = i; // Initialisierung redundant, aber zur Verdeutlichung
        sum += ptr[i];
    }
    printf("Summe = %d\n", sum);
    free(ptr);
    return EXIT_SUCCESS;
}

Ausgabe: Summe = 45

Direkter Vergleich

Merkmalmalloc()calloc()
Anzahl Parameter1 (Größe)2 (Anzahl, Größe)
Speicherzustand nach AllokationUninitialisiert (Müllwerte)Null-initialisiert
Typischer AnwendungsfallEinzelblock, manuelle InitialisierungArrays/Strukturen mit sauberem Start
PerformanceSchneller (kein Nullen)Langsamer (Null-Overhead)
SicherheitHöheres Risiko durch MüllwerteGeringeres Risiko durch Auto-Nullung
Rückgabewert bei FehlschlagNULLNULL
Standard-Headerstdlib.hstdlib.h

Fazit

C Sprache

  1. C# Ausdrücke, Anweisungen & Blöcke: Umfassender Leitfaden mit Beispielen
  2. C++ do‑while‑Schleife: Syntax, Praxisbeispiele und verschachtelte Schleifen
  3. C++ Zeiger meistern: Konzepte, Beispiele & praktische Anwendungen
  4. C++ char‑Datentyp meistern: Deklaration, ASCII & Konvertierungstechniken
  5. C++ Operator‑Overloading: Praktischer Leitfaden mit Code‑Beispielen
  6. C++-Funktionen erklärt: Mit praktischen Code-Beispielen
  7. C# Collections meistern: Praktisches Tutorial mit Real-World-Beispielen
  8. While- vs. Do-While-Schleifen: Klare Gegenüberstellung mit praktischen Beispielen
  9. calloc() in C: Null-initialisierte Speicherallokation mit praktischem Beispiel
  10. Pythons str.count(): Zeichen & Teilstrings zählen mit Beispielen