社区
C语言
帖子详情
这段程序有没有内存问题?????
ninyjun2008
2003-05-19 07:36:59
char* my_trim(char* src)
{
char *des = src;
while ((*des)==' ') {des++;}
return des;
}
...全文
84
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是指向函数内的栈内存空间
栈空间在函数调用结速过后,就释放了,而你还在返回值里指向了这个栈空间
当然有内存问题了
你应该把值返回去,
你必须知道的495个C语言
问题
中,如果不关心a[]的哪一个分量会被写入,这段代码就没有
问题
,i也的确会增加1,对吗? 3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 3.12 我不想学习那些...
内存
泄漏是什么?如何避免
内存
泄漏?
内存
泄漏并不是指
内存
在物理上的消失,而是应用程序分配某段
内存
后,因为设计错误,失去了对该段
内存
的控制,因而造成了
内存
的浪费。
内存
泄漏的危害:长期运行的程序出现
内存
泄漏,影响很大,如操作系统、后台服务...
数据和程序有区别吗?如何确定
内存
中的信息哪些是数据,哪些是程序?
CS(CodeString)指向的是指令段地址,指令段寄存器DS(DataString)指向的是数据段地址,数据段寄存器SS(StackString)指向的是栈顶段地址,栈段寄存器
内存
中的数据和程序没有区别,说都是以2进制形式存储CS指向的段地址...
什么是
内存
泄漏?
内存
泄漏并非指
内存
在物理上的消失,而是应用程序分配某段
内存
后,由于设计错误,导致在释放该段
内存
之前就失去了对该段
内存
的控制,从而造成了
内存
的浪费。
内存
泄漏通常情况下只能由获得程序源代码的程序员才能...
内存
为什么要分段? 分成多少种段? 段与段寄存器的区别?
8086CPU有20根地址线,最大可寻址
内存
空间为1MB。而8086的寄存器只有16位,指令指针(IP)和变址寄存器(SI、DI)也是16位的。用16位的地址寻址1MB空间是不可能的。所以就要把
内存
分段,也就是把1MB空间分为若干个段...
C语言
70,035
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章