malloc() Funktion i C-bibliotek med EXEMPEL
โก Smart sammanfattning
malloc() in C reserves a block of memory on the heap at runtime and returns a void pointer to its first byte, letting programs request storage whose size is unknown until the code actually executes.

Vad รคr malloc i C?
Funktionen malloc() stรฅr fรถr minnesallokering. Det รคr en funktion som anvรคnds fรถr att tilldela ett minnesblock dynamiskt. Den reserverar minnesutrymme av specificerad storlek och returnerar nollpekaren som pekar till minnesplatsen. Pekaren som returneras รคr vanligtvis av typen void. Det betyder att vi kan tilldela malloc-funktion till vilken pekare som helst.
syntax
ptr = (cast_type *) malloc (byte_size);
Hรคr,
- ptr รคr en pekare av cast_type.
- Malloc-funktionen returnerar en pekare till det tilldelade minnet av byte_size.
Example: ptr = (int *) malloc (50)
Nรคr denna sats exekveras framgรฅngsrikt, reserveras ett minnesutrymme pรฅ 50 byte. Adressen fรถr den fรถrsta byten av reserverat utrymme tilldelas pekaren ptr av typen int.
Tรคnk pรฅ ett annat exempel pรฅ malloc-implementering:
#include <stdlib.h> int main(){ int *ptr; ptr = malloc(15 * sizeof(*ptr)); /* a block of 15 integers */ if (ptr != NULL) { *(ptr + 5) = 480; /* assign 480 to sixth integer */ printf("Value of the 6th integer is %d",*(ptr + 5)); } }
Produktion:
Value of the 6th integer is 480
Notice that sizeof(*ptr) was used instead of sizeof(int) in order to make the code more robust when *ptr declaration is typecasted to a different data type later.
Tilldelningen kan misslyckas om minnet inte rรคcker till. I det hรคr fallet returnerar den en NULL-pekare. Sรฅ du bรถr inkludera kod fรถr att leta efter en NULL-pekare.
Keep in mind that the allocated memory is contiguous and it can be treated as an array. We can use pekare arithmetic to access the array elements rather than using brackets [ ]. We advise to use + to refer to array elements because using incrementation ++ or += changes the address stored by the pointer.
Malloc-funktionen kan ocksรฅ anvรคndas med teckendatatypen sรฅvรคl som komplexa datatyper som strukturer.
Why Use malloc() in C?
Static arrays and ordinary variables fix their size when the program is compiled, which wastes space when the requirement turns out smaller and fails outright when it turns out larger. malloc() solves this by requesting memory at runtime, so a program can size a buffer to the exact amount of data it receives. This runtime flexibility is the heart of dynamisk minnesallokering in C.
Dynamic allocation with malloc() is the right choice in several common situations:
- The amount of input is unknown until the program runs, such as reading a file or a user-supplied list.
- Large blocks are needed that would overflow the limited stack, since malloc() draws from the much larger heap.
- Data must outlive the function that created it, because heap memory persists until it is explicitly released.
- Structures and arrays need to grow or shrink while the program is executing.
Because the reserved block is handed back as a pointer, it can be passed between functions cheaply without copying the underlying data.
How to Free Memory Allocated by malloc()
Memory reserved by malloc() lives on the heap and is never released automatically. When a program keeps allocating without freeing, it slowly consumes all available memory, a defect known as a memory leak. The free() function returns a finished block to the system so the space can be reused.
The free() function takes a single argument, the pointer that malloc() returned, and releases the whole block at once:
int *ptr; ptr = malloc(10 * sizeof(int)); if (ptr != NULL) { /* use the allocated memory here */ free(ptr); /* release the block */ ptr = NULL; /* avoid a dangling pointer */ }
Follow these rules to manage dynamic memory safely:
- Call free() exactly once for every successful malloc(); freeing the same block twice causes undefined behavior.
- Set the pointer to NULL after freeing so it cannot be reused as a dangling pointer.
- Never free() a pointer that malloc() did not return, including one shifted by pointer arithmetic.
- Match every allocation with a matching release before the pointer goes out of scope.
keeping allocation and release in balance is the core discipline of manual memory management in C, and it prevents both leaks and crashes caused by reusing freed memory.
malloc() vs calloc(): Key Differences
malloc() and calloc() both reserve heap memory, but they differ in their arguments and in how they treat the new block. malloc() takes one argument, the total number of bytes, and leaves the contents uninitialized, so the block holds unpredictable garbage values until the program writes to it. calloc() takes two arguments, the number of elements and the size of each, and clears every byte to zero before returning the pointer.
The practical differences come down to three points:
- Initialization: calloc() zeroes the memory, while malloc() does not, which makes malloc() slightly faster when the values will be overwritten anyway.
- Arguments: you write malloc(n * size) but calloc(n, size) to reserve the same array.
- Use case: choose calloc() when a clean, zeroed block matters, and malloc() when speed is preferred and initialization is handled manually.
Both functions are declared in stdlib.h, both return a void pointer or NULL on failure, and both hand their memory back with the same free() function.

