C语言-使用指针实现内存动态分配

作者 : 开心源码 本文共1081个字,预计阅读时间需要3分钟 发布时间: 2022-05-11 共75人阅读

动态存储分配函数

在C语言中,动态分配内存是通过动态存储分配函数 malloc() 来实现的,其功能是:

  • 在内存的动态存储区中分配一连续空间。若申请成功,则返回指向所分配内存空间的起始地址的指针;若申请内存空间不成功,则返回NULL(值为0)。
#include <stdio.h>#include <stdlib.h>int main(){    int a[5]={10,15,8,9,6};    int length;    printf("请输入你想分配内存空间的个数:");    scanf("%d",&length);    int *p = (int *)malloc(sizeof(int)*length);  //指针变量p中存放的是动态分配内存块的起始地址    *p=10; //相当于a[0]    p[1]=15;  //相当于a[1]    printf("%d  %d\n",*p,p[1]);    return 0;}

运行结果

image.png

#include <stdio.h>#include <stdlib.h>int main(){    int length;    printf("请输入你想分配内存空间的个数:");    scanf("%d",&length);    int *p = (int *)malloc(sizeof(int)*length);    if(p==NULL){   // 检查内存分配能否成功        printf("Unable to allocate memory.\n");        exit(1);    }    //也可以把 p 当成一个普通数组来用    printf("请输入 %d 个数:",length);    for(int i=0;i<length;i++)        scanf("%d",&p[i]);    //打印输出数组    printf("你输入的数组为:\n");    for(int i=0;i<length;i++)        printf("%d\t",*(p+i));    free(p); //释放分配的内存空间    return 0;}

运行结果

image.png

注意:

  • 在调使用 malloc() 时,应该利使用 sizeof 计算存储块大小,不要直接写数值,由于不同平台数据类型占使用空间大小可能不同
  • 每次动态分配空间都必需检查能否成功,考虑到意外情况的解决
  • 尽管这里的存储块是动态分配的,但它的大小在分配后也是确定的。不要越界用,尤其不能越界赋值,否则可能引起非常严重的错误

动态存储释放函数

动态存储分配函数 void free(void *p) 功能:

  • 释放同动态存储分配函数申请到的整块内存空间,p为指向要释放空间的首地址。假如p的值是空指针,则free什么都不做。该函数无返回值。

注意:

  • 释放后不允许再通过该指针去访问已经释放的块,否则可能引起灾难性错误。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » C语言-使用指针实现内存动态分配

发表回复