请问 new 后需要 memset吗,还有如果new后没有delete会有什么后果

a76624929 2010-06-18 08:17:15

char* urldecode(char *str1)
{
if(str1==NULL){return"";}
char* str=new char[strlen(str1)+1];
memset(str,0,strlen(str1)+1);
strcpy(str,str1);
int len;
char *dest = str;
char *data = str;
len=strlen(str);
while (len--) {
if(*data == '%' && len >= 2 && isxdigit((int) *(data + 1))
&& isxdigit((int) *(data + 2))) {
*dest = (char) php_htoi(data + 1);
data += 2;
len -= 2;
} else{
*dest = *data;
}
data++;
dest++;
}
*dest = '\0';
return str;
}

像这个函数 new一个str 返回也是str 真不知道该任何 delete
char* str=new char[strlen(str1)+1];

想这样的函数在工程中还有几十个

工程是服务器,exe会长期运行,请问这样new后不delete 会有什么不好
...全文
397 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gg606 2010-06-18
  • 打赏
  • 举报
回复
我觉得可以这样来设计这个函数
char* urldecode(char *dest, char *str1)
{
..........
}
由调用者在调用这个函数之前分配内存,调用函数之后也由调用者负责释放。而具体怎么分配和释放(不一定用new,也可以malloc,HeapAlloc,...)都是调用者的事。这样就不会有“不知道该任何 delete (当然这句我没看懂)”的困扰了。
Eleven 2010-06-18
  • 打赏
  • 举报
回复
new和delete要对应。。。
jianuMan 2010-06-18
  • 打赏
  • 举报
回复
如果分配的内存空间需要使用多次的话 就要memset

使用完必须 delete 要不能就内存泄漏了
系统越来越慢
3jaja 2010-06-18
  • 打赏
  • 举报
回复
如果字符型 new 后 strcpy,memset 没必要。
如果你想初始化 new 后的内存设为一个值,可用memset,例如全部清0,或设为-1(或其它的值)。
liuyun213 2010-06-18
  • 打赏
  • 举报
回复
不需要memset,你直接strcpy了
内存泄漏,运行次数多了,内存越来越大
gz_qmc 2010-06-18
  • 打赏
  • 举报
回复
new 只是分配好
要初始化的话还是要用memset的
如果用了之后不delete
内存会越来越少,最后死机.俗称内存泄漏
其实就等于按排一个人到岗又不给按排工作是一个道理的
该人就成了典型的:占着毛坑不拉屎
3jaja 2010-06-18
  • 打赏
  • 举报
回复
返回用完后 delete,不然内存越用越多,机器越来越慢

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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