C语言动态内存分配 #

一、malloc函数 #

1.1 函数原型 #

c
void* malloc(size_t size);

1.2 使用示例 #

c
#include <stdio.h>
#include <stdlib.h>

int main() {
    int* p = (int*)malloc(sizeof(int) * 5);
    if (p == NULL) {
        printf("分配失败\n");
        return 1;
    }
    
    for (int i = 0; i < 5; i++) {
        p[i] = i + 1;
    }
    
    for (int i = 0; i < 5; i++) {
        printf("%d ", p[i]);
    }
    printf("\n");
    
    free(p);
    p = NULL;
    return 0;
}

二、calloc函数 #

2.1 函数原型 #

c
void* calloc(size_t num, size_t size);

2.2 使用示例 #

c
#include <stdio.h>
#include <stdlib.h>

int main() {
    int* p = (int*)calloc(5, sizeof(int));
    if (p == NULL) {
        return 1;
    }
    
    for (int i = 0; i < 5; i++) {
        printf("%d ", p[i]);
    }
    printf("\n");
    
    free(p);
    return 0;
}

calloc会自动初始化为0。

三、realloc函数 #

3.1 函数原型 #

c
void* realloc(void* ptr, size_t size);

3.2 使用示例 #

c
#include <stdio.h>
#include <stdlib.h>

int main() {
    int* p = (int*)malloc(5 * sizeof(int));
    
    p = (int*)realloc(p, 10 * sizeof(int));
    if (p == NULL) {
        return 1;
    }
    
    free(p);
    return 0;
}

四、free函数 #

4.1 使用要点 #

c
free(p);
p = NULL;
  • 释放后置NULL
  • 避免重复释放
  • 避免内存泄漏

五、总结 #

函数 功能
malloc 分配内存
calloc 分配并清零
realloc 调整大小
free 释放内存

下一步,让我们学习内存泄漏!

最后更新:2026-03-26