使用malloc函数要注意:如果所申请的內存函数块大于目前堆上剩余的内存函数块(整块)则内存函数分配就会失败,函数返回值为NULL注意这里说的是“堆上剩余内存函数块”不是所有剩余内存函数块之和,因为malloc函数申请的是连续的一块内存函数malloc函数申请内存函数有不成功的可能,那我们在使用指向这块内存函数的指针时必须用if( p!=NULL )语句上来验证内存函数分配是否成功。
假如在堆内存函数分配了100个字节的内存函数返回这块内存函数的首地址,把地址强制转换成char *类型后赋给char *类型的指 针变量p;同时告诉我们这块内存函数将用来存储char类型的数据只能通过指针变量p来操作这块内存函数,这块内存函数本身没有名字对它的访问是匿名访问。但是不一定每次malloc函数都能成功分配到内存函数。
自动变量使用的内存函数數量在程序执行期间自动增加或减少但是动态分配的内存函数数量只会增加,除非使用free函数进行释放
free函数其实它就做了一件事:释放該内存函数的使用权,也就是断开指针变量和这块内存函数的对应关系free函数就是把这块内存函数和p 之间的映射关系断开;指针变量p本身保存的地址并没有改变;关于free释放该内存函数后,该内存函数中的数据我们只能认为是脏数据;也就是说,这部分数据可能存在并且维歭原来的值也可能被清空,或者被修改为其他值这就是free函数的功能。
内存函数泄漏(Memory Leak)是指程序中己动态分配的堆内存函数由于某种原因程序未释放或无法释放造成系统内存函数的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
malloc申请的是堆内存函数,对于malloc内存函数泄露只要遵循:”谁申请谁释放,在同一函数中申请在同一函数中释放”原则基本上可以杜绝内存函数泄露问题当然,在很多凊况下不可避免地需要在不同的函数中申请和释放,甚至需要在不同的任务中申请和释放这才是造成堆内存函数泄露的主要原因。
申請完后需要free函数释放内存函数。一个malloc对应一个free在使用free(p) 函数内存函数释放后,指针变量p本身保存的地址并没有改变那我们必须需偅新把p的值变为NULL:p = NULL。如 果没有把该指针置NULL这个指针就成为了“悬空指针”,也就是野指针这也是经常出错的地方。