【原】函数返回指针,指向的内存谁来释放?

您所在的位置:网站首页 c语言指针需要释放吗 【原】函数返回指针,指向的内存谁来释放?

【原】函数返回指针,指向的内存谁来释放?

2024-07-10 17:49| 来源: 网络整理| 查看: 265

    好几年没用C/C++了,由于项目需要,重拾C/C++,使用中时不时的有种亲切感涌来。由于C/C++的自由,让人痛苦但更是让人喜欢的原因,一些经验和技巧显得尤为重要。

    最近总是想不明白,一个函数返回一个内存或者对象的指针,那么这个指针指向的对象(内存)到底由谁来释放?要知道,函数返回指针,通常是给外部临时使用的,其指向的内存通常由函数或者成员函数所在的对象自己来管理,其实就是遵从一个原则:自己的事自己做。

    如果返回一个函数中的临时变量地址,很显然,当执行return后,出了临时变量的作用区,变量将被销毁,这个指针指向的内存就被释放掉了,系统可能在任何时候修改它,这个指针实际变成了野指针,外部使用它是相当危险的;

    如果函数是个类的成员函数,我们能想到的是在对象中申明一个指针,由对象来管理它,成员函数只管使用,但问题是,如果有很多这样的函数,岂不是有很多这样的、只为函数存在的一些奇奇怪怪的指针?

    实际上,解决办法很简单——使用静态变量!——前面不是空了,而是白了,想看的,自己先想想答案,然后再想办法看吧 :0

来段代码:

 

//  取得Xml元素的值 //  itemName:元素名 //  buff:查找缓冲区 //  return:value字符串 char *  XmlPack::getElementValue( char *  itemName,  char *  buff){     static   char  value[ 64 ];     int  itemLen  =  strlen(itemName);     char *  itemStart  =   new   char [itemLen  +   3 ];    memset(itemStart,  ' \0 ' , itemLen  +   3 );    itemStart[ 0 ]  =   ' ' ;    strncpy(itemStart + 1 * sizeof ( char ), itemName, itemLen);     char *  itemEnd  =   new   char [itemLen  +   4 ];    memset(itemEnd,  ' \0 ' , itemLen  +   4 );    itemEnd[ 0 ]  =   ' ' ;    strncpy(itemEnd + 2 * sizeof ( char ), itemName, itemLen);     char *  pos1  =  strstr(buff, itemStart);     if (pos1  !=  NULL)    {        pos1  +=  strlen(itemStart);         char *  pos2  =  strstr(pos1, itemEnd);         if (pos2  !=  NULL)        {            assert((unsigned  int )(pos2 - pos1)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3