C语言动态内存分配的详解

 更新时间:2017年07月23日 09:56:55   投稿:lqh  
这篇文章主要介绍了C语言动态内存分配的详解的相关资料,这里提供了实现方法整理和出现错误的解决办法,需要的朋友可以参考下

C语言动态内存分配的详解

1.为什么使用动态内存分配

数组在使用的时候可能造成内存浪费,使用动态内存分配可以解决这个问题。

2. malloc和free

C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放。

(1)void *malloc(size_t size);

malloc的参数就是需要分配的内存字节数。malloc分配一块连续的内存。如果操作系统无法向malloc提供更多的内存,malloc就返回一个NULL指针。

(2)void free(void *pointer);

free的参数要么是NULL,要么是一个先前从malloc、calloc或realloc返回的值。

3. calloc和realloc

(1)void *calloc(size_t num_elements,size_t element_size);

calloc也用于内存分配。malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0。

(2)realloc(void *ptr,size_t new_size);

realloc函数用于修改一个原先已经分配的内存块的大小。如果它用于扩大一个内存,那么这块内存原先的内容依然保留,新增加的内存添加到原先内存块的后面。如果它用于缩小一个内存块,该内存块尾部的部分内存被拿掉,剩余部分内存的原先内容依然保留。

4. 使用动态分配的内存

(1)使用示例

int *pi;

pi = malloc(25 * sizeof(int));

if(pi == NULL){

printf("out of memery\n");

exit(1);

}

(2)使用间接访问

int *pi2,i;

pi2 = pi;

for(i = 0;i < 25;i += 1)

*pi2++ = 0;

也可以使用下标。

int i;

for(i = 0;i < 25;i += 1)

*pi[i] = 0;

5. 常见的动态内存错误

常见的错误有:对NULL指针进行解引用操作、对分配的内存进行操作时越过边界、释放并非内存分配的内存、试图释放一块动态分配的内存的一部分以及一块动态内存释放之后被继续使用。

以上就是对C语言中动态内存分配的资料讲解,如有疑问请大家留言或者到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • C语言实现贪吃蛇游戏设计

    C语言实现贪吃蛇游戏设计

    这篇文章主要为大家详细介绍了C语言实现贪吃蛇游戏设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C++中map容器的具体使用

    C++中map容器的具体使用

    本文主要介绍了C++中map容器的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • C++实现LeetCode(904.水果装入果篮)

    C++实现LeetCode(904.水果装入果篮)

    这篇文章主要介绍了C++实现LeetCode(904.水果装入果篮),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++存储持续性生命周期原理解析

    C++存储持续性生命周期原理解析

    这篇文章主要为大家介绍了C++存储持续性生命周期原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 如何使用C语言实现细菌的繁殖与扩散

    如何使用C语言实现细菌的繁殖与扩散

    这篇文章主要为大家详细介绍了C语言实现细菌的繁殖与扩散,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Qt学习笔记之QPalette调色板类

    Qt学习笔记之QPalette调色板类

    这篇文章主要为大家详细介绍了Qt学习笔记之QPalette调色板类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • C语言中自定义类型详解

    C语言中自定义类型详解

    大家好,本篇文章主要讲的是C语言中自定义类型详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++ ReSharper2021激活码永久有效

    C++ ReSharper2021激活码永久有效

    ReSharperC++是为c/c++开发者打造的一款实用Visual Studio扩展插件,这款插件旨在提升开发者的效率,今天给大家分享这款软件的激活方法,需要C++ ReSharper2021激活码的朋友参考下本文
    2021-06-06
  • C++生成格式化的标准字符串实例代码

    C++生成格式化的标准字符串实例代码

    这篇文章主要给大家介绍了关于C++生成格式化的标准字符串的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • C++中使用mutable关键字的场景分析

    C++中使用mutable关键字的场景分析

    C++中的mutable关键字用于修饰类的成员变量,使其在const成员函数中可以被修改,它主要用于缓存、线程同步和调试等场景,以支持对象的逻辑常量性,在使用mutable时,应确保其修改不会破坏对象的外部表现状态,本文介绍C++中使用mutable关键字的场景分析,感兴趣的朋友一起看看吧
    2025-02-02

最新评论