美文网首页程序员C语言
C语言-用指针实现内存动态分配

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

作者: 黄一倚 | 来源:发表于2018-07-15 21:39 被阅读25次

动态存储分配函数

在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什么都不做。该函数无返回值。

注意:

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

相关文章

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

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

  • 指针是C语言中重要数据类型,利用指针可以有效的表示复杂的数据结构,实现动态分配内存,更方便、更灵活的使用数组、...

  • C++ new 和 delete 运算符

    在 C 语言中,动态分配内存用 malloc () 函数,释放内存用 free () 函数。如下所示: 在 C++...

  • 【郝斌C】动态分配内存、指针、结构体

    一、多级指针 二、动态分配内存实现跨函数使用内存 有什么用?通过函数来建立某内存并返回该首个地址 phead = ...

  • 慕课网-Linux C语言指针与内存-学习笔记

    Linux C语言指针与内存 工具与原理 指针 数组 字符串 堆内存与栈内存 gdb内存调试工具。 C语言中指针的...

  • C++语法之引用类型

    c语言的强大,无疑归功于指针。c++脱胎于c语言,保留了指针。掌控了指针就等于掌控了内存,优秀的程序用可以凭此在如...

  • 第一章 c++过程化编程

    学习内容: 命名空间 指针与动态分配内存 引用与指针传参、返回指针、递归、函数默认值、重载的使用 掌握C++11的...

  • 链表代码注意事项

    1、理解指针或引用的含义 比如C语言是指针,就是相当于JAVA的引用 2、警惕指针丢失和内存泄漏 C 语言,内存管...

  • C语言——第四次笔记

    指针指针的定义指针的类型指针的指向内容指针的运算数组与指针指针与函数动态分配内存结构体文件读写头文件与实现文件实例...

  • C语言续

    指针指针的定义指针的类型指针的指向内容指针的运算数组与指针指针与函数动态分配内存结构体文件读写头文件与实现文件实例...

网友评论

    本文标题:C语言-用指针实现内存动态分配

    本文链接:https://www.haomeiwen.com/subject/iktmpftx.html