指针判断问题

askhar 2009-05-03 04:18:08
有一段程序需要检测内存泄露并消除,其中用到了这样的一个函数
char* myCat(char *str1,char *str2)
{
char *res;
.....
.....
lenStr1=strlen(str1);
lenStr2=strlen(str2);
res=new char[(lenStr1+lenStr2+1)*sizeof(char)];
...
...
...
return res;
}

并且有这样的调用

myStr=myCat(myStr,temp);

其中myStr和temp都是char*类型。问题是如果调用myCat之前,myStr是用new来分配的话,调用myCat之前用delete[]释放内存,但是这中调用总共在95个位置出现,myCat函数的第一个参数myStr不一定是用new分配的,可能是直接char *myStr="hello";这样的话,我在函数调用之前用delete[] myStr是错误的,不用delete[] myStre的话,如果myStr是用new分配的话,会出现内存泄露。所以怎么样判断myStr是用new分配的或者不是?如果不能判断,我只能修改定义了,因为这是一个很大工作量,所以我问一下。如果问了同样的问题,还请大家谅解,谢谢!
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
askhar 2009-05-03
  • 打赏
  • 举报
回复
是啊,要是自己写的代码不会这么头疼,也不会这么乱用的。我想到异常处理能否解决这个问题,刚好4楼的提出了这个想法,我试试看!
aaaa3105563 2009-05-03
  • 打赏
  • 举报
回复
帮顶·
sun_renjie 2009-05-03
  • 打赏
  • 举报
回复
别人的代码哈,要改设计就TMD的难。。。
要不花点功夫做个基于 vector 的类,把 new 出来的内存塞进去,统一销毁。
短平快哈,不知道可行否。
oyster2008 2009-05-03
  • 打赏
  • 举报
回复
同意2楼说法
shexinwei 2009-05-03
  • 打赏
  • 举报
回复
汗了,完全没看懂要说什么意思!
lpf000 2009-05-03
  • 打赏
  • 举报
回复
用异常处理吧
askhar 2009-05-03
  • 打赏
  • 举报
回复
我不是在里面判断str1,而是在调用函数myCat之前需要释放str1,如果不是用new分配的话,就不能释放了,我不用delete,如果在有些位置传入new分配的内存,就会出现内存泄露。这是别人写的程序,写程序的人调用的也太。。。。
  • 打赏
  • 举报
回复
本来strcat是不带内存越界检测的,所以就不存在重新分配内存的。完全需要myStr输入前就要分配足够。


然后你现在这样一个函数
char* myCat(char *str1,char *str2)

明显是希望把得到ste1+str2的的字符串,存好,并返回,你是新开内存存储,str1完全就不应该动他。
外面用的栈就是栈,用的堆也由外面的自己free或者delete.
不解你为何要在里面判断str1干嘛。
sun_renjie 2009-05-03
  • 打赏
  • 举报
回复
单给一个 char* 应该是无法判断内存类型的(当然,可以使用额外的代码保存这个信息)。
我的疑问是,你既然用了 c++ 的 new,为什么不干脆用 string 算了呢?

64,680

社区成员

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

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