c语言如何动态分配内存

在C语言中,动态内存分配是一种在程序运行时分配内存的方法,这种方法允许程序员根据程序的需要来分配和释放内存,而不是在编译时静态地分配固定大小的内存空间,动态内存分配主要通过四个函数来实现:malloc(), calloc(), realloc(), 和 free()

c语言如何动态分配内存
(图片来源网络,侵删)

1、malloc() 函数

malloc() 函数用于分配指定字节数的内存空间,它的原型如下:

void *malloc(size_t size);

size 是需要分配的内存空间的字节数,如果分配成功,malloc() 返回一个指向分配内存的起始地址的指针;如果分配失败,返回 NULL

示例:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int *ptr;
    int n = 5;
    // 使用 malloc 分配内存
    ptr = (int *)malloc(n * sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败
");
        exit(0);
    } else {
        printf("内存分配成功
");
    }
    // 使用分配的内存
    for (int i = 0; i < n; i++) {
        ptr[i] = i + 1;
        printf("%d ", ptr[i]);
    }
    // 释放内存
    free(ptr);
    return 0;
}

2、calloc() 函数

calloc() 函数用于分配指定数量的元素的内存空间,并将分配的内存空间初始化为0,它的原型如下:

void *calloc(size_t num, size_t size);

num 是需要分配的元素个数,size 是每个元素的字节数,如果分配成功,calloc() 返回一个指向分配内存的起始地址的指针;如果分配失败,返回 NULL

示例:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int *ptr;
    int n = 5;
    // 使用 calloc 分配内存
    ptr = (int *)calloc(n, sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败
");
        exit(0);
    } else {
        printf("内存分配成功
");
    }
    // 使用分配的内存
    for (int i = 0; i < n; i++) {
        printf("%d ", ptr[i]);
    }
    // 释放内存
    free(ptr);
    return 0;
}

3、realloc() 函数

realloc() 函数用于重新分配内存空间,它可以根据需要调整已分配内存的大小,它的原型如下:

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

ptr 是指向已分配内存的指针,size 是新的内存大小,如果重新分配成功,realloc() 返回一个指向新分配内存的起始地址的指针;如果重新分配失败,返回 NULL

示例:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int *ptr;
    int n = 5;
    // 使用 malloc 分配内存
    ptr = (int *)malloc(n * sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败
");
        exit(0);
    } else {
        printf("内存分配成功
");
    }
    // 扩大内存空间
    ptr = (int *)realloc(ptr, 10 * sizeof(int));
    if (ptr == NULL) {
        printf("内存重新分配失败
");
        exit(0);
    } else {
        printf("内存重新分配成功,现在可以存储10个整数
");
    }
    // 使用分配的内存
    for (int i = 0; i < 10; i++) {
        ptr[i] = i + 1;
        printf("%d ", ptr[i]);
    }
    // 释放内存
    free(ptr);
    return 0;
}

4、free() 函数

free() 函数用于释放已分配的内存空间,当不再需要已分配的内存时,应使用 free() 函数将其释放,以避免内存泄漏,它的原型如下:

void free(void *ptr);

ptr 是指向已分配内存的指针,释放内存后,ptr 将变为悬空指针,不应再使用。

示例:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int *ptr;
    int n = 5;
    // 使用 malloc 分配内存
    ptr = (int *)malloc(n * sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败
");
        exit(0);
    } else {
        printf("内存分配成功
");
    }
    // 使用分配的内存
    for (int i = 0; i < n; i++) {
        ptr[i] = i + 1;
        printf("%d ", ptr[i]);
    }
    // 释放内存
    free(ptr);
    ptr = NULL; // 将指针设置为 NULL,避免悬空指针
    return 0;
}

在C语言中,动态内存分配是一种在程序运行时分配内存的方法,通过使用 malloc(), calloc(), realloc(), 和 free() 函数,可以根据程序的需要动态地分配和释放内存空间,在使用动态内存分配时,需要注意检查分配是否成功,以及在不再需要已分配的内存时及时释放,以避免内存泄漏。

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/345848.html

(0)
酷盾叔的头像酷盾叔订阅
上一篇 2024-03-18 02:48
下一篇 2024-03-18 02:50

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入