发个帖子请教

nunumi 2012-09-10 10:02:23
编写一个程序实现删除字符串中出现最少次数的字符
char *fun(char *str,int len)
{
int i=0;
int j=0;
int min=0x7fffffff;
int hash[256]={0};
char *result=(char*)malloc(len);
for(i=0;i<len;i++)
{
hash[str[i]]++;
}
for(i=0;i<256;i++)
{
if(hash[i]!=0&&hash[i]<min)
min=hash[i];
}
for(i = 0,j = 0; i < n; i++)
{
if(hash[str[i]] != min)
{
result[j++] = str[i];
}
}

return result;
}
问题:函数体中的动态内存需要释放吗?
...全文
138 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
函数体内动态申请的指针保存在栈中,而动态申请的内存空间在堆内,当函数结束时需返回这个指针并保存起来,否则该指针值会被释放掉,而堆中的这块内存不会被函数返回所影响,可以在使用完以后通过保存的指针释放掉,但是还有个问题:系统释放掉动态内存的缺点:在小程序中这样做没有问题,如果是一个持续的进程,会造成内存的泄漏呢?
[/Quote]
如果是经常的申请又不释放,长时间的运行,内存泄露会很严重,但是如果是小程序,执行时间短,即使异常退出而没有释放,操作系统会处理的,这点都不能处理,何谓操作系统?
nunumi 2012-09-11
  • 打赏
  • 举报
回复
函数体内动态申请的指针保存在栈中,而动态申请的内存空间在堆内,当函数结束时需返回这个指针并保存起来,否则该指针值会被释放掉,而堆中的这块内存不会被函数返回所影响,可以在使用完以后通过保存的指针释放掉,但是还有个问题:系统释放掉动态内存的缺点:在小程序中这样做没有问题,如果是一个持续的进程,会造成内存的泄漏呢?
nunumi 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

动态内存需要释放,molloc -》free去释放
当然如果你不释放,在进程退出的时候,操作系统也会为你释放,但是这样不好,不好
[/Quote]系统释放会有什么问题?
AnYidan 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

c语言中的malloc,realloc需要free
c++中的new需要delete
[/Quote]

++
BYD123 2012-09-11
  • 打赏
  • 举报
回复
必须!
Gloveing 2012-09-11
  • 打赏
  • 举报
回复
动态内存需要释放,molloc -》free去释放
当然如果你不释放,在进程退出的时候,操作系统也会为你释放,但是这样不好,不好
赵4老师 2012-09-11
  • 打赏
  • 举报
回复
出现次数都一样时,最后结果为空字符串。
nunumi 2012-09-11
  • 打赏
  • 举报
回复
对的,对的[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
函数体内动态申请的指针保存在栈中,而动态申请的内存空间在堆内,当函数结束时需返回这个指针并保存起来,否则该指针值会被释放掉,而堆中的这块内存不会被函数返回所影响,可以在使用完以后通过保存的指针释放掉,但是还有个问题:系统释放掉动态内存的缺点:在小程序中这样做没有问题,如果是一个持续的进程,会造成内存的泄漏呢?

如果是经常的申请又不释放,长时间的运行,内存泄露会很……
[/Quote]
xcyl 2012-09-10
  • 打赏
  • 举报
回复
要free
SillyBenzhu 2012-09-10
  • 打赏
  • 举报
回复
c语言中的malloc,realloc需要free
c++中的new需要delete
qq120848369 2012-09-10
  • 打赏
  • 举报
回复
需要。

指针是栈,malloc是堆,指针记录地址,当然地址可以是栈地址也可以是堆地址,这里是堆地址,再另外,指针也可以在堆上。
现在很多做透明加解密的初学者都比较困惑,不知从何下手,我也是如此,从什么都不会开始,慢慢肯文件系统内幕,到OSR上面请教,四个月的时间还是收获颇丰。其实真正研究以后会发现,很多都是体力活,要不断的去跟踪文件的操作流程。在这里发一个基于minifilter的透明加解密的驱动源码仅供大家参考,其中也实现了对文件标识的处理,文件标识放在文件尾部。算是抛砖引玉吧。坦白的说,这个代码并不稳定(偶尔与norton杀毒软件会有冲突),但是我觉得整个流程是正确的,可能有些细节还没有考虑清楚,我觉得对初学者还是有一定帮助吧,当然大虾们可以跳过,呵呵。另外,有关加解密算法的代码由于不是我写的,也不好公开,所以我把相关代码用“\\\”给注释掉了(但没有去掉),请大家见谅,不过不会对整个流程产生影响。大家可以重点看一下各个派遣函数的实现。 欢迎大家拍砖,觉得有点意思就顶一下啊,在看代码的过程中如果有什么好的建议,也希望能告诉我。 最后非常感谢XiangXiangRen,zzbwang,neak47等网友在这段时间内对我的帮助。XiangXiangRen的书以及zzbwang的帖子对我完成这项工作有很大的帮助和参考价值,在此谨与大家分享。 编译环境:WDK6001.18002 XP x86 PS: 您可以将附件中的代码进行修改和转发,但转发时请注明出处。 http://bbs.driverdevelop.com/htm_data/39/1001/119736.html

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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