malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu

malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu浅谈C语言中:常见的动态内存错误常见的动态内存错误有很多,笔者仅仅举出几个典型的列子,供大家参考一下!!1.对NULL(空指针)进行解引用操作!!请看代码:显而易见的,这段代码是错误的!!没有对malloc函数,开辟内存空间失败后的判断!!malloc函数开辟了20个字

浅谈C语言中:常见的动态内存错误   常见的动态内存错误有很多,笔者仅仅举出几个典型的列子,供大家参考一下!!   1.对NULL(空指针)进行解引用操作!!   请看代码:   显而易见的,这段代码是错误的!!没有对malloc函数,开辟内存空间失败后的判断!!   malloc函数开辟了20个字节的空间,将p指向这20个字节,p指向这20个字节的起始位置,而p作为整型指针,对其解引用,访问4个字节!将5赋值给*p,则第一个素为5!但是,代码看着虽好,但是却显得不少很严谨!!原因在于:malloc函数的返回值不确定是否为:NULL(空指针),当malloc开辟空间失败,会返回NULL(空指针),而对空指针解引用,会出现错误!!   下面请看正确的书写代码格式:   在上述的正确代码中,具体内容的变化,我们可以通过调试可以看出来!!在此,笔者就先不做过多的解析!!   2.对动态内存开辟的越界访问!   请看笔者的代码:   在上述的代码中:malloc函数开辟了20个字节,用来存放5个整型,但是,在for循环里面,进行了越界访问!所以,导致程序崩溃!!
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu   3.对非动态开辟的内存,使用free释放!   在上述代码中:int num = 10; 是一个局部变量,进入这个程序的时候开始创建,出这个程序的时候,就进行销毁,不需要进行free释放!   在该段代码的最后:用free来释放,会导致程序的崩溃!!
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu   4.使用free释放一块动态开辟内存的一部分!   请看笔者的代码:   上述代码,也会导致程序崩溃!!   首先,开辟了40个字节,Int 类型,可以存放10给整型数据,但是,在for循环中,由于 for (i = 0; i < 5; i++);使用了5个!!,随着p++的进行,此时,p已经指向第五个素的位置,不再是指向起始位置了!!
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu
malloc分配内存在操作系统中的过程_最大内存取决于主板还是cpu   但是,在free(p)的释放中,也释放不了后面的空间,导致程序崩溃!!!   在free释放的时候,p指向的不再是,动态内存开辟的起始位置了!!因此需要用另外一个指针来遍历!!   总结:对于动态内存开辟的空间,一定要记录其起始位置,若没有记录起始位置,一直进行++(往后走),最终会导致这片空间无法释放!!   5.动态开辟内存忘记释放(内存泄漏)!   请看笔者的代码:   在函数体的部分: return p的作用: 是返回动态内存空间的起始地址!!   但是在最后没有进行free所以,出现了错误!!   正确的free代码为:   在这里,释放的是:ptr所指向的空间!!   忘记释放不再使用的动态开辟的空间,会造成内存泄漏!!切记,动态开辟的空间,一定要释放,并且正确释放!!

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/81763.html

(0)
上一篇 2024年 8月 1日
下一篇 2024年 8月 1日

相关推荐

关注微信