美文网首页
C语言动态内存分配与释放

C语言动态内存分配与释放

作者: 温柔倾怀 | 来源:发表于2019-09-29 08:29 被阅读0次

静态开辟(在编译期间就已开辟完成),在函数中定义的变量存放在栈区,程序员不需要关心内存的内配与释放。


  • 定义一个数组,数组的大小必须是一个常量。

静态变量,全局变量存储在静态存储区,随着程序的结束而结束。

动态内存开辟在堆区,程序员手动释放。

#include <stdio.h>
#include <stdlib.h>
void main(int argc,char* argv[]){
    int n;
    printf("n: ");
    scanf("%d",&n);
    int *p = (int *)malloc(sizeof(int)*n);
    if (NULL==p)
    {
        printf("malloc memory fail\n");
        exit(1);
    }
    for (int i=0;i<n;i++)
    {
        p[i]=i+1;
    }
    for (int j=0;j<n;j++)
    {
        printf("%d\n",p[j]);
    }
    //p = (int *)realloc(p,sizeof(int)*10);  一定要通过返回值接收
    //重新分配空间,只有成功在先前的空间之后分配,其值才会保持不变
    //原有空间的值是否会改变取决于能否在先前分配的地址后面找到满足扩展的内存空间,
    //若找不到,会去其他位置找满足的空间,此时,如果不通过返回值进行接收,重新分配的空
    //间前面已分配的空间内的值就会改变
}

free(p) //释放指针p所指的空间

自定义实现重新分配内存函数,可保证无论先前的空间之后是否能够支持新分配的空间大小,皆可
保证先前的值不变。

#include <memory.h>
void* my_realloc(void *p,size_t size){
    void *new_p = malloc(size);
    if (NULL==new_p)
    {
        printf("malloc memory fail\n");
        exit(1);
    }
    memcpy(new_p,p,size);
    free(p);
    p = new_p;
    return p;
}
void *pv = &a;//泛型指针  可接受任何类型的地址
//但是不可对其进行 pv++ 的操作,void 类型并不能确定+多少大小

相关文章

  • C语言动态内存分配与释放

    静态开辟(在编译期间就已开辟完成),在函数中定义的变量存放在栈区,程序员不需要关心内存的内配与释放。 定义一个数组...

  • c++动态分配浅析

    1. c语言中动态分配和释放. 在c中,申请动态内存是使用malloc和free,这两个函数是c的标准库函数,分配...

  • 数据结构基础之动态内存分配(malloc)

    0x00 malloc函数简介 C语言提供了四个基本的动态内存管理(内存分配与释放)函数,这些函数的原型包含在st...

  • C语言内存管理一本道来

    动态内存分配 我们需要动态内存分配的原因 C语言中的一切操作都是基于内存的 变量和数组都是内存的别名,如何分配这些...

  • C语言中手把手教你动态内存分配

    C语言中手把手教你动态内存分配 动态内存分配 常见的内存分配的错误 先上一个内存分配的思维导图:便于联想想象,理解...

  • (二)C语言之动态内存分配

    (二)C语言之动态内存分配 一、静态内存分配 定义是指定分配的内存长度就是静态内存分配,是在栈内存中分配 二、C语...

  • C/C++动态内存分配与释放

    1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 ...

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • 前端实战篇-聊聊JavaScript内存

    C、C++语言需要手动管理内存的分配与释放(常用方法:malloc(), calloc(), realloc()和...

  • malloc/free和new/delete的笔记

    相同点:都可用于申请动态内存和释放内存。 不同点:(1)操作对象有所不同。malloc与free是C++/C 语言...

网友评论

      本文标题:C语言动态内存分配与释放

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