社区
C语言
帖子详情
这段程序有没有内存问题?????
ninyjun2008
2003-05-19 07:36:59
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
...全文
67
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是指向函数内的栈内存空间
栈空间在函数调用结速过后,就释放了,而你还在返回值里指向了这个栈空间
当然有内存问题了
你应该把值返回去,
什么是
内存
泄漏?
内存
泄漏并非指
内存
在物理上的消失,而是应用程序分配某段
内存
后,由于设计错误,导致在释放该段
内存
之前就失去了对该段
内存
的控制,从而造成了
内存
的浪费。
内存
泄漏通常情况下只能由获得程序源代码的程序员才能...
一文掌握C/C++
内存
泄漏,防止
内存
泄漏以及检测工具!
,C/C++、面试、刷题、算法尽管咨询我,关注我,有
问题
私聊! ???? 关注专栏:C/C++面试通关集锦(优质好文持续更新中……)???? 目录 一、什么是
内存
泄漏? 二、如何防止
内存
泄漏? 1. 成对出现 2. 智能指针 ...
数据和程序有区别吗?如何确定
内存
中的信息哪些是数据,哪些是程序?
CS(CodeString)指向的是指令段地址,指令段寄存器DS(DataString)指向的是数据段地址,数据段寄存器SS(StackString)指向的是栈顶段地址,栈段寄存器
内存
中的数据和程序没有区别,说都是以2进制形式存储CS指向的段地址...
malloc 是如何分配
内存
的?
大家好,我是小林。 很早之前写了一篇图解虚拟
内存
的文章:真棒!...free() 函数只传入一个
内存
地址,为什么能知道要释放多大的
内存
? 发车! Linux 进程的
内存
分布长什么样? 在 Linux 操作系统中,
什么是
内存
溢出,什么是
内存
泄漏?
这是很多小伙伴经常问我的一个
问题
,今天花3分钟时间给大家介绍一下。先来介绍什么是
内存
溢出? 1、什么是
内存
溢出? 发生
内存
溢出。 我们来看到右侧的区域,假设我们JVM中可用的
内存
空间只剩下3M,但是我们要创建一...
C语言
69,336
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章