【原】函数返回指针,指向的内存谁来释放? |
您所在的位置:网站首页 › c语言指针需要释放吗 › 【原】函数返回指针,指向的内存谁来释放? |
好几年没用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 |