作者bobhsiao (㊣小臃肿㊣)
看板Soft_Job
标题[闲聊] 大家工作上看过哪些夸张的 CODE ?
时间Sat May 15 07:04:30 2010
最近看到同事写一个
char* GetXXXName(...)
{
char str[256] = {'\0'};
.....
return str;
}
回传区域变数指标...囧rz
神奇的是跑起来都没错, 大概也不会改了吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.84.56.192
1F:推 keyword1983:应该是那块记忆体还没被其他程式用到 "值"暂时没变 05/15 07:48
2F:推 ggg12345:如果是static linker,又有做range,size check会有错吗? 05/16 07:44
3F:→ bobhsiao:2F: 请看 C_and_CPP 版置底的「新手十二诫」第6条 05/16 08:58
4F:推 ggg12345:出错是compiler对function内local array使用stack临时配 05/16 14:04
5F:→ ggg12345:置又再重用同一stack,才会有pointer跟着消失/覆盖问题, 05/16 14:07
6F:→ ggg12345:如果静态配置(另配stack或linker给一段data space)就不出 05/16 14:10
7F:→ ggg12345:错,这是该语言使用stack配置local variable才造成的.如果 05/16 14:13
8F:→ ggg12345:现该问题, 是对该待进一步使用的local variable欠宣告. 05/16 14:22
9F:→ ggg12345:出 应该 缺指定 05/16 16:11
10F:→ bobhsiao:回楼上,以C来说,local var就是用stack,所以C不能这样做 05/16 20:41
11F:→ bobhsiao:方法1:用 malloc 可行但後续使用容易忘记free 05/16 20:42
12F:→ bobhsiao:方法2:用static var,缺点:thread unsafe且str一直占ram 05/16 20:44
13F:→ bobhsiao:方法3:由caller准备好一块空间传入,func内不做记忆体管理 05/16 20:45
14F:推 meteor260:还是要改,否则到时後真的会找不到错误喔== 05/18 19:30