char szBuff[]在这种情况下会出现内存泄露吗

我看你有戏 2009-02-18 11:02:07

假设有一个字符串数组

char szBuff[] = "abcdefg128908239fsdkfjsldf";

有个无聊的人执行了以下代码

szBuff[6] = '\0';

szBuff[10] = '\0';

szBuff[15] = '\0';

这样以后,系统还能正常回收内存吗

最好用例子说服我
...全文
171 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2009-02-18
  • 打赏
  • 举报
回复
这个例子不存在回收。
Dinelgua 2009-02-18
  • 打赏
  • 举报
回复
例子

char szBuff[] = "abcdefg128908239fsdkfjsldf";

不管怎么改 szBuff 的大小都不变 为27 这是szBuff这个数据的属性

所以在回收时 按长度27回收这块栈内存就一定没有问题

且栈内存由系统自由分配释放 不会出现泄漏 不像堆内存

而且即使是堆内存 像楼住那样该都没事 测试过了代码如下 没有泄露


char szBuff[] = "abcdefg128908239fsdkfjsldf";
char * pszBuff = new char[27];
memcpy(pszBuff,szBuff,27);
pszBuff[5]='\0';
delete [] pszBuff;
zhh157 2009-02-18
  • 打赏
  • 举报
回复
'\0'综合恐惧症
呵呵

系统管理内存
只会标记那段内存被使用
而不会去管这段内存你会怎么去用
不过会在必要的时候将其收回
hai040 2009-02-18
  • 打赏
  • 举报
回复
int buf[] = {1,2,34,5}
会不会内存泄漏?
int*没有结束标志,不像char*有'\0'
我看你有戏 2009-02-18
  • 打赏
  • 举报
回复
好了谢谢各位了,不来问一下总觉得不放心,现在可以安心写下去了
  • 打赏
  • 举报
回复
不过你这个操作对于C的strlen,strcmp这些操作会有影响。道理你应该明白吧。
  • 打赏
  • 举报
回复
呵呵,楼主多虑了。
栈区连续存储的数据多着呢,那么'\0'字符也不少吧,如果一段代码运行完后,它的栈区不能完全被回收,你的机器不早就挂了。
小布 2009-02-18
  • 打赏
  • 举报
回复
可以正常收回
jiweihong 2009-02-18
  • 打赏
  • 举报
回复
可以回收!~
你申请空间不可能申请正好的。
在你定义的时候已经开辟了空间,是多少就是多少,回收的时候按你开辟多少回收多少。
du51 2009-02-18
  • 打赏
  • 举报
回复
可以
HelloDan 2009-02-18
  • 打赏
  • 举报
回复
可以正常收回

只有molloca() new出来的不释放才有可能出现内存漏露
捕鲸叉 2009-02-18
  • 打赏
  • 举报
回复
可以正常回收
fireseed 2009-02-18
  • 打赏
  • 举报
回复
原来楼主说的那个“无聊的人”就是自己呀!哈哈!!

delphi_911 2009-02-18
  • 打赏
  • 举报
回复
楼上的讲的清楚了,放心吧。
jackzhhuang 2009-02-18
  • 打赏
  • 举报
回复
栈会在函数结束的时候收回,放心好了。

64,681

社区成员

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

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