美文网首页C语言
malloc动态开辟内存

malloc动态开辟内存

作者: 风情云 | 来源:发表于2020-03-13 23:14 被阅读0次

动态开辟内存

平时在程序中的普通变量是开辟在栈区,如果程序过大,所有的普通变量都开辟在栈区,栈区内存会不足,内存溢出,程序出错。所以要将一些比较大的开销放在堆区。堆区由我们手动开辟,手动释放。不同于栈区,定义变量就自动开辟,变量生命周期结束会自动释放。下面看看如何在堆区手动开辟内存

malloc

函数介绍
<stdlib.h> //头文件
void *malloc( size_t size );
形参 size 开辟的内存块大小
返回类型 void * 万能指针类型

    //动态开辟内存
    //在堆区开辟4个字节内存
    int *ptr = NULL;
    ptr = (int*)malloc(sizeof(int));
    //也可以写成
    //ptr = malloc(sizeof(int))
    //最好强制类型转换一下
动态开辟内存

操作堆区的内存与在栈区的操作一样,ptr已经拿到地址,就可以指针法操作内存。

    *ptr = 10;

手动开辟内存后,需要手动释放内存
void free( void *ptr );
形参为区地址,无返回值。

    //手动释放内存
    free(ptr);

动态开辟内存(malloc),告诉系统该内存块有人使用,不允许再次动态开辟内存,来使用这块内存块。手动释放(free)后,该指针与此内存块没有联系,允许动态开辟内存使用该内存块。禁止手动释放同一块内存两次,禁止手动释放内存后,再次操作该内存。这样会导致运行出错,这是因为操作非法内存。避免这种情况的出现,再手动释放内存后,讲该指针置为NULL;

    ptr = NULL;

realloc

<stdlib.h>
void *realloc( void *ptr, size_t size );
功能: 函数将ptr 对象的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸都可以。 返回值是指向新空间的指针,如果错误发生返回NULL。
这个函数的使用需要先在堆区开辟内存,然后使用该函数动态修改操作的内存块大小。

    int *ptr = NULL;
    ptr = (int*)malloc(4);
    realloc(ptr,8);
    printf("ptr: %u\n",ptr);
    realloc(ptr,4);
    printf("ptr: %u\n",ptr);

结果展示

ptr: 10297496
ptr: 10297496
realloc

动态改变内存大小,指针指向的内存首地址不变。这个就可以用于动态数组。

注意事项

动态开辟内存,不需要后及时手动释放,并把指针指向空,养成良好的编程习惯。realloc会有一些坑,尽量使用malloc。

文章结束


微信号

相关文章

  • c基础—动态开辟内存和字符串

    静态内存开辟 动态开辟内存(malloc,free) realloc和动态内存开启注意事项

  • malloc动态开辟内存

    动态开辟内存 平时在程序中的普通变量是开辟在栈区,如果程序过大,所有的普通变量都开辟在栈区,栈区内存会不足,内存溢...

  • C语言基础二

    一、静态开辟内存 二、动态开辟 1、malloc() 2、使用场景 3、realloc() // 面试题: re...

  • C++ allocator使用示例

    动态内存管理 之前我们讲述过动态内存的开辟,可以通过new, malloc,以及alloc等方式,本文通过介绍al...

  • C语言的malloc

    为什么C语言要有malloc malloc就是memory allocate动态分配内存,malloc的出现时为了...

  • 12月24日回顾

    冲刺月薪1W努力做好预习,打好C,OC基础! 学习记录:动态内存分配,主要是函数malloc,开辟一个堆空间存储数...

  • 第11章:动态内存分配

    为什么使用动态内存分配 malloc和free calloc和realloc 使用动态分配的内存 常见的动态内存错...

  • C/C++中的基本概念

    1.new、delete、malloc、free关系 (1)都可用于申请动态内存和释放内存。(2)malloc与f...

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

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

  • malloc和new的区别

    1 malloc函数 malloc的全称是memory allocation,中文叫做:动态内存分配。 原型:ex...

网友评论

    本文标题:malloc动态开辟内存

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