社区
C语言
帖子详情
这段程序有没有内存问题?????
ninyjun2008
2003-05-19 07:36:59
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
...全文
74
17
打赏
收藏
这段程序有没有内存问题?????
char* my_trim(char* src) { char *des = src; while ((*des)==' ') {des++;} return des; }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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是指向函数内的栈内存空间
栈空间在函数调用结速过后,就释放了,而你还在返回值里指向了这个栈空间
当然有内存问题了
你应该把值返回去,
汇编学习 数据和程序有区别吗?如何确定
内存
中的信息哪些是数据,哪些是程序?
CS(CodeString)指向的是指令段地址,指令段寄存器DS(DataString)指向的是数据段地址,数据段寄存器SS(StackString)指向的是栈顶段地址,栈段寄存器
内存
中的数据和程序没有区别,说都是以2进制形式存储CS指向的段地址...
什么是
内存
泄露?怎么检测
什么是
内存
泄露? 简单地说就是申请了一块
内存
空间,使用完毕后没有释放掉。...由程序申请的一块
内存
,且没有任何一个指针指向它,那么这块
内存
就泄露了。 2、如何检测
内存
泄露 第一:良好的编码习惯,...
C++程序发生
内存
越界,一定会导致程序崩溃吗?详解
内存
越界
内存
越界是否一定会导致程序崩溃吗?详解
内存
越界
什么是
内存
泄漏?
内存
泄漏并非指
内存
在物理上的消失,而是应用程序分配某段
内存
后,由于设计错误,导致在释放该段
内存
之前就失去了对该段
内存
的控制,从而造成了
内存
的浪费。
内存
泄漏通常情况下只能由获得程序源代码的程序员才能...
32位应用程序如何使用大于2GB的
内存
?
32位应用程序如何使用大于2GB的
内存
? 不管是在 32 位 Windows 还是在 64 位 Windows,32 位应用程序都只能使用最大 2GB 的
内存
,这是我们司空见惯的一个设定。但其实 Windows 提供了一些方法让我们打破这样的设定...
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章