这段程序有没有内存问题?????

ninyjun2008 2003-05-19 07:36:59
char* my_trim(char* src)
{
char *des = src;

while ((*des)==' ') {des++;}
return des;
}

...全文
67 17 打赏 收藏 转发到动态 举报
写回复
用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是指向函数内的栈内存空间
栈空间在函数调用结速过后,就释放了,而你还在返回值里指向了这个栈空间
当然有内存问题了
你应该把值返回去,

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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