社区
C语言
帖子详情
这段程序有没有内存问题?????
ninyjun2008
2003-05-19 07:36:59
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
...全文
85
17
打赏
收藏
这段程序有没有内存问题?????
char* my_trim(char* src) { char *des = src; while ((*des)==' ') {des++;} return des; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
David2008
2003-05-21
打赏
举报
回复
我觉得很奇怪
你的while 循环 是判断 是否是 空格
虽然没有错
但我觉得,你最好有其他的处理语句
就这样的话,我想 除了你,没有人会这样用
RouteSim
2003-05-21
打赏
举报
回复
我试了,确实没有问题;
但有一些疑问,为什么没有问题呢?编译器到底做了些什么呢?
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
函数中的指针des应该是函数的局部变量对不对??
是局部变量在超出此函数的作用域时就应该销毁对不对??
函数中指针des和src指向同一快内存,局部变量被销毁时它指向的内存也应该销毁,是吧;
这样不就有内存问题了吗??
我私下认为,这还是有问题的,我们之所以在运行时没有发现问题,只是因为这个问题是潜伏的;返回一个局部变量的指针或引用根本就不是一个好的习惯;
个人观点 欢迎指教;
谢谢了;
changbaohua
2003-05-21
打赏
举报
回复
为什么要拘泥于怎么写呢?
char* my_trim(char* src)
{
return (!src || (*src)!=' ')?src:my_trim(++src);
}
char* my_trim(char* src)
{
for (;src && (*src)==' ';src++);
return src;
}
wshcdr
2003-05-21
打赏
举报
回复
这个写法很奇怪
Meyer
2003-05-21
打赏
举报
回复
这个函数本身没有内存问题,
但使用他的时候要小心,他会带来一些别的问题
如果你返回的指针的生命周期比传进来的const char* src生命周期还长
那你的这个返回值就会成为空悬指针,而且这个错误使用者根本无法发现。
这段程序,存在设计问题,而且你的trim应该叫 TrimStart(),毕竟你只
处理了左边的一部分空格。
真相重于对错
2003-05-21
打赏
举报
回复
我觉的my_trim应当这么写比较好
char *my_trim( const char* src)
{
char *des=NULL;
if( src == NULL )
return NULL;
des = src;
while((*des)==' '){ des++; }
return strdup( des );
}
BinaryWorld
2003-05-21
打赏
举报
回复
没有问题。
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
你传递的指针src是指向非栈内存的,des也会指向这个内存,正确的。
不过你的while循环到底是想判断什么,是想去掉字符串前面的空格吗?那如果是\r\n,怎么办,还有tab
brucegong
2003-05-21
打赏
举报
回复
一般不会这么写的。最典型的习惯就是用一根指针带出来。这种返回方式倒是没有什么问题,但是……现实中这么些的代码却很容易出问题。因为你返回的是一根比较玄乎的指针,写函数的可能能够正确使用,其他的使用者却未必会。
idontlikenickname
2003-05-20
打赏
举报
回复
sigh!
你的程序好恐怖~~~
司令说的对.
Zark
2003-05-20
打赏
举报
回复
对此函数来说,没有内存问题也没有逻辑问题.考虑到"健壮性",应该在函数起始处有
if(!src)
return NULL;
保证函数不会崩溃.
cenlmmx
2003-05-19
打赏
举报
回复
没有问题
powercharlie
2003-05-19
打赏
举报
回复
肯定有问题,要先检验src是否为null
zhouzhaohan
2003-05-19
打赏
举报
回复
没问题,放心。不过trim的时候是不是还应该考虑tab呢?当然也许你的程序本意就是如此。
dragonlw
2003-05-19
打赏
举报
回复
有问题,你的des的值根本没变。
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
你怎么判断的?
应该是
while ((*des)!=' ') {des++;}
呵呵。我也弄了半天!
LionEagle
2003-05-19
打赏
举报
回复
同意kingofvc(What..If)
to funboy88(司令):
des是指向的不是栈内存空间,请看清楚
kingofvc
2003-05-19
打赏
举报
回复
应该没有问题 毕竟只是读没有进行写
当进行写的时候一定要注意边界问题 越界了就会非法操作
funboy88
2003-05-19
打赏
举报
回复
你这样没有内存问题才怪事呢
des是指向函数内的栈内存空间
栈空间在函数调用结速过后,就释放了,而你还在返回值里指向了这个栈空间
当然有内存问题了
你应该把值返回去,
malloc 是如何分配
内存
的?
大家好,我是小林。 很早之前写了一篇图解虚拟
内存
的文章:真棒!20 张图揭开
内存
管理的迷雾,瞬间豁然开朗 最近想多写一些
内存
管理的文章,这次我们就以 malloc 动态
内存
分配为切入点,我在文中也做了小实验: malloc 是如何分配
内存
的? malloc 分配的是物理
内存
吗? malloc(1) 会分配多大的
内存
? free 释放
内存
,会归还给操作系统吗? free() 函数只传入一个
内存
地址,为什么能知道要释放多大的
内存
? 发车! Linux 进程的
内存
分布长什么样? 在 Linux 操作系统中,
什么是
内存
泄漏?
内存
泄漏是什么? 与几种常见情况。存在危害
内存
泄漏 和
内存
溢出 解决方案 检测
内存
泄漏常用的检测工具 如何避免
内存
泄漏?
重学操作系统----24 | 虚拟
内存
:一个程序最多能使用多少
内存
?
目录 一、为什么
内存
不够用? 二、交换(Swap)技术 三、虚拟
内存
3.1页(Page)和页表 3.2MMU 3.3 页表条目 3.4大页面
问题
四、
问题
4.1 一个程序最多能使用多少内? 4.2可不可以利用哈希表直接将页编号映射到 Frame 编号?
内存
是稀缺的,随着应用使用
内存
也在膨胀。 当程序越来复杂,进程对
内存
的需求会越来越大。 从安全角度考虑,进程间使用
内存
需要隔离。 从
内存
一致性
问题
,存在不希望 CPU 进行缓存的场景。 这个时候,有一个虚拟化层承接各种...
什么是Java
内存
模型?
点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!本文转载自公众号 占小狼的博客说”JVM
内存
模型“,有人会说是关于JVM
内存
分布(堆栈,方法区等)这些介绍,也有地方说(深入理解JVM虚拟机)上说Java
内存
模型是JVM的抽象模型(主
内存
,本地
内存
)。这两个到底怎么区分啊?有必然关系吗?比如主
内存
就是堆,本地
内存
就是栈,这种说法对吗?时间久了,我也把
内存
模型和
内存
结构给搞混了
什么是
内存
泄漏?该如何检测?又该如何解决?
前言 这个
问题
是我之前翻看面经的时候见到的。那位小姐姐把
内存
泄漏当成了
内存
溢出
问题
去解答的,结果当场挂掉了。为此总结一下,之前和一位老哥也讨论过这个
问题
。可见不管是面试还是工作这都是一个极为重要的点。 我也曾在面阿里的时候也遇到过原题,题目是写出俩
内存
泄漏案例,然后问如何排查?如何解决? 本篇文章大体结构来自外国大佬baeldung; 一、介绍 1、什么是
内存
泄漏 java的优势之一就是内置了垃圾回收器GC,它帮助我们实现了自动化
内存
管理。但是GC再好,也有老马失前蹄的时候,它不能保证提供一个解决
内存
泄漏的
C语言
70,039
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章