MST

星途 面试题库

面试题:C语言指针在简单内存分配与释放中的作用

请用C语言编写一段代码,使用指针动态分配一块整数数组的内存空间,存入5个整数(1, 2, 3, 4, 5),然后输出数组内容,最后释放该内存空间。并解释在这个过程中指针是如何协助内存管理的。
21.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    // 动态分配能存放5个整数的内存空间
    ptr = (int *)malloc(5 * sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    // 存入5个整数
    for (int i = 0; i < 5; i++) {
        *(ptr + i) = i + 1;
    }

    // 输出数组内容
    printf("数组内容: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", *(ptr + i));
    }
    printf("\n");

    // 释放内存空间
    free(ptr);
    ptr = NULL;

    return 0;
}

指针在内存管理中的作用解释:

  1. 动态内存分配malloc函数用于在堆上分配指定大小的内存空间。它返回一个指向分配内存起始地址的指针ptr。通过将返回值强制转换为int *类型,我们可以使用这个指针来操作这块内存,就像它是一个普通的整数数组指针一样。如果malloc分配失败,会返回NULL,我们需要进行错误处理。
  2. 访问和操作内存:通过指针算术运算,我们可以像访问数组元素一样访问动态分配内存中的每个整数。例如*(ptr + i)等同于ptr[i],这样我们就可以存入和读取数据。
  3. 释放内存:使用完动态分配的内存后,需要调用free函数来释放它,防止内存泄漏。free函数接受一个先前由malloccallocrealloc分配的内存地址指针作为参数。释放内存后,为了避免悬空指针(指向已释放内存的指针),我们将指针设置为NULL