→ firedcf:中文版真好:D 很感謝你的分享. 不過.compiler過不了... 04/04 18:06
→ firedcf:debug工具也開不起來XD ...exe產生失敗XD 04/04 18:07
→ 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
→ VictorTom:char *str; cin>>str; 這是很典型的位配置空間就assign 04/04 22:16
→ VictorTom:資料到指標位置去的錯誤啊@_@" 至於為什麼不配置空間就 04/04 22:17
→ VictorTom:清成0, 因為清成0也是需要消耗CPU運算資源的, 如果PG確 04/04 22:17
→ VictorTom:定會寫值, 這個清0的動作就是效能殺手, 不管是stack裡或 04/04 22:18
→ VictorTom:heap裡; 不過malloc回來想自動清0, calloc可以做到這點. 04/04 22:18
→ VictorTom:另外, 以VC來說, debug built會把區域變數的值都清成忘 04/04 22:19
→ VictorTom:了是0xcc還是0xcd, 這樣VC可以幫你抓宣告但未始用的變數 04/04 22:20
→ VictorTom:話說, struct/class實體好像也不適合套用這個清0的動作. 04/04 22:22
推 fjm31714:memset也可以幫你初始化 04/05 01:17