- C標準庫
- C庫 - 首頁
- C庫 - <assert.h>
- C庫 - <complex.h>
- C庫 - <ctype.h>
- C庫 - <errno.h>
- C庫 - <fenv.h>
- C庫 - <float.h>
- C庫 - <inttypes.h>
- C庫 - <iso646.h>
- C庫 - <limits.h>
- C庫 - <locale.h>
- C庫 - <math.h>
- C庫 - <setjmp.h>
- C庫 - <signal.h>
- C庫 - <stdalign.h>
- C庫 - <stdarg.h>
- C庫 - <stdbool.h>
- C庫 - <stddef.h>
- C庫 - <stdio.h>
- C庫 - <stdlib.h>
- C庫 - <string.h>
- C庫 - <tgmath.h>
- C庫 - <time.h>
- C庫 - <wctype.h>
- C程式設計資源
- C程式設計 - 教程
- C - 有用資源
C庫 - malloc() 函式
C 的stdlib庫 malloc() 函式用於動態記憶體分配。它分配或預留指定位元組數的記憶體塊,並返回指向已分配空間第一個位元組的指標。
malloc() 函式在編譯時不知道所需記憶體大小,而必須在執行時確定時使用。
語法
以下是 malloc() 函式的C庫語法:
void *malloc(size_t size)
引數
此函式接受單個引數:
size_t size − 表示要分配的位元組數。
返回值
以下是返回值:
返回指向新分配的記憶體塊開頭的指標。
如果分配失敗,則返回空指標。
示例1
讓我們建立一個基本的C程式來演示 malloc() 函式的使用。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *pointer = (int *)calloc(0, 0);
if (pointer == NULL) {
printf("Null pointer \n");
}
else {
printf("Address = %p", (void *)pointer);
}
free(pointer);
return 0;
}
輸出
以下是輸出:
Address = 0x55c6799232a0
示例2
以下是另一個 malloc() 的示例。這裡它用於為包含5個整數的陣列分配記憶體。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
int n = 5;
// Dynamically allocate memory using malloc()
ptr = (int*)malloc(n * sizeof(int));
// Check if the memory has been successfully allocated
if (ptr == NULL) {
printf("Memory not allocated.\n");
exit(0);
} else {
// Memory has been successfully allocated
printf("Memory successfully allocated using malloc.\n");
// Free the memory
free(ptr);
printf("Malloc memory successfully freed.\n");
}
return 0;
}
輸出
以下是輸出:
Memory successfully allocated using malloc. Malloc memory successfully freed.
示例3
下面的C程式將陣列元素動態儲存在指標中,並計算陣列元素的總和。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 5, i, *ptr, sum = 0;
int arr[] = {10, 20, 30, 40, 50};
ptr = (int*) malloc(n * sizeof(int));
// if memory cannot be allocated
if(ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
// Copy values from arr to dynamically allocated memory
for(i = 0; i < n; ++i) {
*(ptr + i) = arr[i];
sum += *(ptr + i);
}
printf("Sum = %d", sum);
// free the allocated memory
free(ptr);
return 0;
}
輸出
以下是輸出:
Sum = 150
廣告