杂谈

在程序中使用链表,难免会遇到需要动态申请变量,这时候就需要用到malloc函数


在《数据结构》教材上,许多同学遇到了malloc与free函数,但书上并没有详细进行解释,我在这里给大家简单科普一下

  • malloc函数是什么?

malloc()是动态内存分配函数,用来向系统请求分配内存空间。malloc是 memory allocate 的缩写,即“分配内存”。要调用它必须要包含头文件<stdlib.h>。

  • 函数原型
#include<stdlib.h>
void *malloc(unsigned long size);
  • 使用方式
int n;
int i;
int *a;
scanf("%d", &n);
a = (int*)malloc(sizeof(int)*n);//为数组a申请n个整型大小空间 

但是malloc只管分配内存空间,并不能对分配的空间进行初始化,所以申请到的内存中的值是随机的

1.png

通常会使用memset()进行初始化后再使用

使用后如图所示

2.png

函数原型如下

void *memset(void *str, int c, size_t n)

代码实例

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int n;
    int i;
    int *num;
    scanf("%d", &n);
    num = (int*)malloc(sizeof(int)*n);//为数组a申请n个整型大小空间 
    memset(num,0,sizeof(int)*n);
    for (i=0; i<n; i++)
    {
    printf("%d\n", num[i]);
    }
    return 0;
}

  • free()函数

free()的作用是对动态分配的内存进行释放。如果你申请过的空间不需要了,那么就需要使用free()将malloc()申请的空间还给系统。但实际上程序结束后,这些内存会被自动释放掉

这里提供一个free实例供参考,感兴趣的朋友自行百度

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   char *str;
   str = (char *) malloc(15);//申请内存
   free(str);//释放内存
   return(0);
}

总结

  1. malloc申请的内存,一旦申请成功,就只能为你所用,其他地方的malloc无法申请到这块内存;
  2. free释放内存后,这块内存重获自由,程序其他地方调用malloc,有可能系统会把这块内存分配出去;
This is just a placeholder img.