求教下函数返回值为指针的问题西山居的一道笔试题,给定一个接口vectorchar**getString(const char page[
求教下函数返回值为指针的问题
西山居的一道笔试题,给定一个接口
vector<char*>*getString(const char page[]
const char begin[]
const char end[]);
把字符串page中位于begin和end直接的串都保存起来,例如
page:abcdefghijk,begin:ab,end:jk;
截取cdefghi放到vector中。
问题1:由于要返回vector的指针,是不是要用new vector?而不能直接用vector a;
问题2:在保存cdefghi的时候是不是应该用char *str=new char[100]而不能直接用char str[100];
3:由于我要把vector传出去,则我就不能在该函数中delete掉,但我传出去的vector在外部能够被delete掉吗?我传的只是一个指针,如果我在外部用了vector<char *> s=getString(...);当我delete s的时候是不是会把我在函数new出来的vector释放掉?
char *str=new char[100];
str="Sender";
char *s1=str;
delete str;
cout<<s1;
s1还是能输出Sender,这说明我释放的只是指针,这个时候我怎么释放掉new 出来的数组呢?
4:想问下各位前辈在什么情况下项目里会这样要求函数返回指针值? c++函数返回值,指针
[解决办法]
1 是的, 必须用new或者malloc, 返回局部变量地址很不安全的!
2 看具体需求,局部需要就不要浪费堆空间了,
3 可以delete的,只要有new出来的首地址就好!本来new出来的空间就是自己管理释放的!
4 很多情况!比如接口函数生成的一些值是接口调用完成后还需要用到有效值的,需要长期保存!
要不从外面传一个地址进来,要不自己new空间出来填充出来的!
[解决办法]你这个设计不好。
先要考虑好,你返回的是一组指针(或者下标,用来表示在原字符串的位置),还是直接返回另外一个表示结果的字符串(相当于把结果从原串中复制出来)
如果返回指针或者下标,那么事先用个vector<char*>或者vector<int>,传递引用到函数中比较好,避免了在函数中new。
如果返回的是拷贝过来的字符串,那么直接返回string就行,string用于字符串处理比vector更合适。
[解决办法]这和stl的实现方式有关。仅就vc++带的那个stl来说,它有自己的内存管理池,你向vector添加的所有元素都是从那个池中分配的,并且释放时也不是真的释放掉,而释放回到stl自己的内存缓冲池里,因为像vector这样的结构,每次添加和删除以及挪动位置,都会频繁导致新的元素的分配释放。为了避免频繁的内存分配释放和分配造成的时间成本,stl把自己做了管理机制。这就是你说的,为啥释放了还能访问,因为对于系统来说,你的那块内存没有真正释放,还是归你应用程序所有,只是暂时由stl保管。但建议你不要使用这个变量,stl不知道啥时候就把它分配出去了。
[解决办法]其实楼主的问题很简单,这是人家考试的人出的题,就时说:你别管它是否合理。你必须按这个固定接口写。
那么只有一种方案:vector必须在函数里动态分配,然后把指针返回。