我写的一个方法,值是一串长字符串,保存在一个指针里,请问如何在返回改值之前释放掉改值的内存? char * pBuf; return pBuf; pbuf这个指针大小在1Kb之上。 |
|
10分 |
又要返回串, 又要释放内存….. 你这个要求不对.
因为你返回的是指针, 那么就肯定需要在函数返回后, 这个指针仍然有效. 但你说要删除掉, 那这个指针都无效了, 你返回了也是错的. 应该让函数调用者去释放. 或者使用更高级的智能指针, 有内存引用计数, |
其实我是做了个dll供其它程序使用,那么我调用这个dll的时候是不是会自动释放内存?我只要返回这个指针对应的字符串就行了,使用者应该怎么释放内存? |
|
10分 |
你把这个指针指向的内存释放了,调用方如何可靠地从这个指针指向的内存中获取数据?
一般来说,这类问题在C中有两种解决方法 1.调用方事先分配内存,将分配的内存地址和长度作为参数传递给被调用方,就像gets那样 2.被调用方malloc分配内存,调用方负责释放,就像glibc的getline那样 如果是C++的话,可以考虑使用std::string代替char*形式的字符串 |
10分 |
没太懂你要求,推荐使用标准模板库中的智能指针,可以在你不需要的时候自动释放的,不用自己去写代码释放
|
10分 |
Dll和调用者之间最好是谁分配谁释放原则,在构造函数中分配,在析构函数中释放,这是常识
|
一般而主需要遵循: 谁申请, 谁释放原则. 当然, 你也可以偷懒, 让用于自己去delete或者free指针. 但因为是dll中的, 跨模块释放内存, 安全性和稳定性就要差上许多了. |
|
主要是弄清楚你所分配的这个内存中的数据是在何时不再需要了。若在dll中被释放了,外部调用者仍然需要用到内存中的数据会出现异常。
|
|
static char pBuf[4096]; return (char *)pBuf; |
|
通常的做法是再提供一个接口用于销毁资源 |
|
正解 |