作者james732 (好人超)
站内C_and_CPP
标题Re: [问题] 对於一个初学者很难的简单问题...
时间Sat Apr 4 21:45:14 2009
1F:→ firedcf:中文版真好:D 很感谢你的分享. 不过.compiler过不了... 04/04 18:06
2F:→ firedcf:debug工具也开不起来XD ...exe产生失败XD 04/04 18:07
3F:→ firedcf:所以文章开头说的很好...compiler过了後...才能用XD 04/04 18:07
其实编译成功,真的只是第一步啊... XDD
今天才刚遇到一件很妙的事情。
有个同学问我,他的程式在 IDE 底下执行都没有问题,
但是单纯的把执行档抓出来,结果就会错误。
更诡异的是,他把执行档传给我,我反倒可以正常执行。
原本我也一筹莫展,但是看到了他的程式码有个怪东西:
char *str;
cin >> str;
我请他改成了 char str[100]; 之後,
这个问题就很灵异的解决了...XDDD
对了,我忍不住想要问一下。
为什麽 C++ 在宣告变数的时候,不自动把记忆体清成零呢?
毕竟没有人会去想用记忆体里的旧值吧。
如果自动清为零,感觉上应该是百利而无一害(吗??)。
像这个例子,如果自动把 str = 0; 的话,应该就会发生存取违规了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.121.235.85
4F:→ VictorTom:char *str; cin>>str; 这是很典型的位配置空间就assign 04/04 22:16
5F:→ VictorTom:资料到指标位置去的错误啊@_@" 至於为什麽不配置空间就 04/04 22:17
6F:→ VictorTom:清成0, 因为清成0也是需要消耗CPU运算资源的, 如果PG确 04/04 22:17
7F:→ VictorTom:定会写值, 这个清0的动作就是效能杀手, 不管是stack里或 04/04 22:18
8F:→ VictorTom:heap里; 不过malloc回来想自动清0, calloc可以做到这点. 04/04 22:18
9F:→ VictorTom:另外, 以VC来说, debug built会把区域变数的值都清成忘 04/04 22:19
10F:→ VictorTom:了是0xcc还是0xcd, 这样VC可以帮你抓宣告但未始用的变数 04/04 22:20
11F:→ VictorTom:话说, struct/class实体好像也不适合套用这个清0的动作. 04/04 22:22
12F:推 fjm31714:memset也可以帮你初始化 04/05 01:17