c语言中的内存管理(重点:动态内存申请释放,野指针,指针函数)

原创 2013年12月04日 13:39:46
内存分布:
代码区
全局变量与静态变量区(全局变量,字符串常量等)
局部变量区(栈区)(自动分配,自动回收)
动态存储区(堆区)

动态内存
1.内存申请malloc要注意:
     1)参数:要申请空间的大小
     2)返回值:void * 
     3)要加出错判断
2.内存释放free要注意:
     1)释放的一定是起始地址
     2)释放内存的一部分是不允许的
     3)不能重复释放
     4)防止内存泄露

野指针的出现情况:
     1)指针变量没有初始化
     2)p在free之后,没有设置为NULL,让人认为是合法的指针。
     3)指针操作越界了

杜绝野指针:
     1)指针变量要初始化,如 int *p = NULL;
     2)free之后,设置为NULL。如 free(p);p = NULL;
     3)指针操作不越界(检查目标空间的长度)

指针函数:返回值是地址(指针)的函数。
指针函数应该返回什么样的地址?
     1)静态存储区中的地址:
          a)全局变量地址
          b)static修饰的局部变量
          c)字符串常量的地址
     2)堆区的地址
     3)函数的参数是指针,可返回
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言:动态内存会被自动释放吗?杜绝“野指针”

函数体内的局部变量在函数结束时自动消亡。很多人误以为示例是正确的。理 由是p 是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉! void Func(void) { cha...

c语言内存管理、野指针、malloc

C语言一共定义四个区块:代码区、全局变量和静态变量区、栈、堆 针对四个区块,用户的内存分配也有三种不同的方式: 静态变量区:在代码编译的时候就分配好了,比如全局变量,被static定义的变...

C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针

C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针 (1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放,造成内存泄露...

动态内存会被自动释放吗?杜绝“野指针”(转载)

函数体内的局部变量在函数结束时自动消亡。很多人误以为示例是正确的。理由是p 是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉!void Func(void){char *p = (...
  • mniwc
  • mniwc
  • 2011年03月09日 20:41
  • 502

动态内存管理与智能指针

C、 C++中编译内存分配://一个 C、 C++程序编译时内存分为 4大存储区:栈区、堆区、数据段、程序代码段。 代码段: 又称为常量区,储存常量和编译之后的代码指令 数据段: 又称为静...

【C++】动态内存管理(四)智能指针(std)

智能指针总结 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了“operator->”操作符,直接...

深入理解C指针学习笔记七之动态内存管理

只针对额强大很大成都上源于它能追踪动态分配的内存。通过指针来管理这部分内存是很多操作的基础,包括一些用来处理复杂数据结构的操作。要完全利用这些能力,需要理解C的动态内存管理怎么回事。 C程序在运行时...

Linux 下C语言学习(六)——二级指针、动态内存分配,函数指针与文件操作

二级指针   一级指针用来保存普通变量的地址   二级指针用来保存一级指针变量的地址     数据类型** 变量名;        Intnum = 0; 一级指针:        In...

c语言指针--动态内存分配

一. 传统数组缺点: 1. 数组长度必须事先指定,而且只能是长整数,不能是变量! 例: int a[5] ; //ok int len = 5; int a[len]...

C语言 指针及动态内存分配

大一学《计算系统基础》的时候,没有讲这一块的内容,导致后面遇到指针就头疼,今天特来梳理一下这块的内容。 1.变量的类型     C语言是一种强类型的语言,即要求定义变量的时候必须制定类型,然后编译...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言中的内存管理(重点:动态内存申请释放,野指针,指针函数)
举报原因:
原因补充:

(最多只允许输入30个字)