C语言【malloc函数】

malloc 函数是 C 语言中的动态内存分配函数,用于在运行时分配指定大小的内存空间。它的函数原型如下:

void *malloc(size_t size);

malloc 函数接受一个参数 size,表示要分配的内存空间的大小(以字节为单位)。它返回一个指向分配的内存块的指针。如果内存分配失败,则返回 NULL

使用 malloc 函数的一般步骤如下:

  1. 引入 stdlib.h 头文件,该头文件包含了 malloc 函数的声明。
  2. 调用 malloc 函数,并传递要分配的内存大小作为参数。
  3. 检查返回的指针是否为 NULL,以确保内存分配成功。
  4. 使用分配的内存空间进行操作。
  5. 最后,在不再需要分配的内存空间时,使用 free 函数释放它,以防止内存泄漏。

demo1:

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

int main() {
    int* numbers;
    int size = 5;
    
    // 分配内存空间
    numbers = (int*)malloc(size * sizeof(int));
    
    if (numbers == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }
    
    // 初始化数组
    for (int i = 0; i < size; i++) {
        numbers[i] = i + 1;
    }
    
    // 打印数组元素
    for (int i = 0; i < size; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");
    
    // 释放内存空间
    free(numbers);
    
    return 0;
}

上述示例代码中,首先声明了一个指向整型的指针 numbers,然后使用 malloc 函数分配了一个包含 5 个整型元素的内存空间。如果分配成功,numbers 将指向分配的内存块。然后,通过循环初始化数组元素,并打印出来。最后,使用 free 函数释放内存空间。

malloc 函数非常有用,特别是在需要动态分配内存的情况下,例如创建动态数组、链表等数据结构时。在使用完分配的内存后,务必记得释放内存,以避免内存泄漏。

demo2

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

int main() {
    int* numbers;
    int numElements = 10;

    // 分配内存
    numbers = (int*)malloc(numElements * sizeof(int));
    if (numbers == NULL) {
        // 内存分配失败,进行错误处理
        printf("内存分配失败\n");
        exit(1); // 可以退出程序或进行其他适当的处理
    }

    // 使用内存
    for (int i = 0; i < numElements; i++) {
        numbers[i] = i * 2;
    }

    // 打印结果
    for (int i = 0; i < numElements; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");

    // 释放内存
    free(numbers);

    return 0;
}

demo2_or:

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

int main() {
    int* numbers;
    int numElements = 10;

    // 分配内存
    numbers = (int*)malloc(numElements * sizeof(int));
    if (numbers == NULL) {
        // 内存分配失败,进行错误处理
        printf("内存分配失败\n");
        exit(1); // 可以退出程序或进行其他适当的处理
    }

    // 使用内存
    int* ptr = numbers; // 将指针 ptr 指向数组的起始地址
    for (int i = 0; i < numElements; i++) {
        *ptr = i * 2; // 使用指针来赋值
        ptr++; // 移动指针到下一个元素的地址
    }

    // 打印结果
    ptr = numbers; // 重新将指针 ptr 指向数组的起始地址
    for (int i = 0; i < numElements; i++) {
        printf("%d ", *ptr); // 使用指针来打印数组元素的值
        ptr++; // 移动指针到下一个元素的地址
    }
    printf("\n");

    // 释放内存
    free(numbers);

    return 0;
}

output:

posted @ 2023-06-27 18:25  __username  阅读(253)  评论(0)    收藏  举报