C++指针释放问题

搞了个象 2020-05-25 05:03:29
大神们好,有这么一个成员函数:

char* CppsFile::GetDeleteCmd(QString strFileName)
{
char* cmd = (char*)malloc(sizeof(char)*200);

QString strCmd = QString("rm") + " " + strFileName;
string cstrCmd = strCmd.toStdString();
strcpy(cmd, cstrCmd.c_str());

return cmd;
}

想问一下, 我直接把这个cmd当返回值 返回了, 这个指针还需要释放吗,如果需要的话,该怎么释放呢?
...全文
503 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
qq_41188149 2020-06-10
  • 打赏
  • 举报
回复
函数返回QString 类型数据不用搞那么麻烦了
  • 打赏
  • 举报
回复
在调用这个函数地方返回值使用完了再释放,不能在这个函数内部释放,不然就没返回值了
晚晶 2020-06-09
  • 打赏
  • 举报
回复
需要释放,在函数外面使用完这个返回值后,你就可以调用free来释放掉这个分配的内存空间了。 推荐把cmd当做参数传入函数内来获取结果,从而代替返回值返回,这样更好
单木成林 2020-06-09
  • 打赏
  • 举报
回复
要的,否则造成内存泄漏
gudufuyun 2020-06-08
  • 打赏
  • 举报
回复
在你这个函数内部不需要释放,使用完返回值,确认相关字符串不会继续使用就需要释放。 都2020了,为何不用shared_ptr
Wfpfly 2020-06-06
  • 打赏
  • 举报
回复
楼主的编码习惯很不好
1、切记使用malloc的地方就必须使用free进行释放(快速理解:借的‘’钱(内存)‘’记得要还)。
2、参数列表建议使用const QString &strFileName,提升效率。
3、如果成员函数只是构造一条删除命令为何不写一个删除函数,这样功能模块清晰。
仔细理解下作用域和指针,有时间看看effective c++。
千梦一生 2020-06-04
  • 打赏
  • 举报
回复
较早也很直观的观念是谁创建谁释放。【模块化也方便】
所以,一些很基础的函数像这种都是接受一个内存区域,放入自己准备返回的数据

像大学食堂你是打饭、盛菜阿姨,她只管给你递上去的碗打饭,你不递碗可没的吃。

当然也可以像你着设计一样,阿姨申请一个盘子【有限的资源】。然后盛饭给你。你吃完了不把盘子放某个地方【释放它】,而是带回寝室,或者随意仍在了某个地方。那食堂的盘子【资源就一直在使用中无法被申请】
pearling 2020-06-04
  • 打赏
  • 举报
回复
1. 对于指针的声明尽量标明它是个指针,因此建议声明成char *pCmd; 2. 即便malloc了一个内存空间,最好要将此空间初始化一下,可以使用memset: memset(cmd, 0x00, sizeof(char)*200); 3. 这个函数定义的没有问题,只是说释放内存的操作要由调用方来完成,只需free cmd即可,并且调用方一定要记得释放,否则就会发生内存泄漏。
  • 打赏
  • 举报
回复
返回QString即可!
QString支持隐式共享,效率还不错
wuyiguo 2020-06-02
  • 打赏
  • 举报
回复
在这个类CppsFile,增加成员变量指针,指向你分配的内存。使用的时候直接取这个变量就可以了。
轻箬笠 2020-05-28
  • 打赏
  • 举报
回复
都已经用了QString了,为啥不干脆点呢?传个QString的引用进去。 void CppsFile::GetDeleteCmd(QString strFileName, QString &out); 楼主这种写法,以前的c语言的库好像蛮多的
yshuise 2020-05-27
  • 打赏
  • 举报
回复
楼主已经意识到了,这种设计函数不好的!
剑文文 2020-05-26
  • 打赏
  • 举报
回复
函数调用完后,释放 char * ptr = GetDeleteCmd(); delete ptr; ptr= nullptr;
  • 打赏
  • 举报
回复
你在这个函数里释放了,返回的就是一个空指针了。用不到的时候及时释放就行了
真相重于对错 2020-05-25
  • 打赏
  • 举报
回复
用c++,为何不用share_ptr 为何不用string
qybao 2020-05-25
  • 打赏
  • 举报
回复
在这个函数里不需要释放
在函数的调用方,不再使用这个返回值的时候再释放

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧