社区
C语言
帖子详情
这段程序有没有内存问题?????
ninyjun2008
2003-05-19 07:36:59
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
...全文
91
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语言的
内存
机制:这段代码到底
有没有
问题
呢?
各位,今天无意间碰到一个有意思的小知识点,感觉还不错,就拿来与大家分享一下, 话不多说,请看代码: char*p=NULL;p="hello world";strcpy(p,"hello world"); 题目很简单,就问这段代码写的
有没有
问题
,如果有,
问题
在哪里? 其实这个
问题
如果你对C语言的存储机制非常熟悉的话,应该是很简单的:我们简单分析一下,第一行代码是没
问题
的,第二行意思是让指针p指向字符串常量,单看也没
问题
,而
问题
就出在第三行了,它的意图是对指针p指向地址的内容进行修改,当然.
看看这段代码
有没有
内存
泄露?
看看这段代码
有没有
内存
泄露? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiBase/html/delphi_20061219185953114.html 类方法: function TAdoHelper.GetDataSet(sqlstr: string; params: TStrings)...
内存
越界一定会导致程序崩溃吗?详解
内存
越界
本文详细解释了
内存
越界不一定导致
内存
越界的
问题
,全面介绍了C++
内存
越界的相关内容。
程序是怎么装载到
内存
并被运行的
在后续所有内容之前,我们需要先达成一个共识,所有的程序都是被装载进
内存
然后才被使用的。装载器会把对应的指令和数据加载到
内存
里面来,让 CPU 去执行,而程序,包括操作系统就是一堆指令和数据的集合。 下面开始套娃,BIOS硬件初始化并开始加载主引导扇区(多系统需要选择启动哪个系统的原因),将操作系统加载到
内存
;移交加载控制权给操作系统,操作系统开始装载非操作系统程序到
内存
。因为Linux和Windows系统的装载器不同,所以这也是为什么Windows上的一部分程序没法在Linux上跑的原因,如.exe。
vue门户网站模板(zip)
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站设计方案 一个基于vue框架构建的门户网站模板
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章