potatotips #59で発表した資料です。 Address sanitizerちょうべんり!
https://potatotips.connpass.com/event/119277/
拙作アプリ「パズル&モナーク」はこちら https://apple.co/2SkC2Pc ソースコード https://github.com/tek-nishi/PuzzleAndMonarch
QPUBUPUJQTڭ͑ͯʂ9DPEF΅ͬͪήʔϜσϕϩούࢁ৴ߦ
View Slide
wʮͱ͖Ͳ͖࣮͕ղআ͞Εͳ͍ʯͱ༑ਓ͔Βใࠂ͞ΕΔࣄͷൃ
w(BNF$FOUFSͷୡ߲ͬͯৄࡉ͕Ӆṭ͞ΕͯΔ͠ɺ௨৴ঢ়گ͕ѱ͔ͬͨͱ͔ͦΜͳΜͰ͠ΐ͏w ͳΜͱͳ͘ΩϟογϡΛ࣮͓ͯ࣌͘͠ͷੳ
͜ͷ࣌͜ΕͰղܾͩͱʜQPUBUPUJQT
w"EESFTT4BOJUJ[FS͝ଘͰ͔͢ʁw 9DPEF͔Β͋Γ·͢9DPEFͷศརͳػೳ
wTBOJUJ[Fw Β͛Δɺ৺Α͘͢Δw Ӵੜతʹ͢Δ"EESFTT4BOJUJ[FSʁ
wϏϧυ௨Δ͕࣮ߦ࣌ͷڍಈ͕ո͍ͭ͠w͜͏͍ͬͨϛεΛ࣮ߦ࣌ʹݕग़ͯ͠ৄࡉͳϩάΛग़ྗͯ͘͠ΕΔྫ͑͜Μͳϛεint main(){int array[10];int i = -1; // おっと!!array[i] = 0;}
wϓϩάϥϜ্ͰͷແͳϝϞϦΞΫηεΛڭ͑ͯ͘ΕΔw0CKFDUJWF$ͰͷΈཱͭνΣοΫϘοΫεʹνΣοΫΛೖΕΔ͚ͩʂ
w͜͏͍͏ͷڭ͑ͯ͘ΕΔϛε͠Όʔͳ͍#include int main(){int array[9] = {};// 配列の内容を出力for (int i = 0; i < 10; ++i){std::cout << array[i] << "\n";}}
ͬͪ͜ͳΜͩΖ͏ʜ
w͜ΕͰσόοάͯ͠ΈΔࢼ͠ʹ0/ʹͯ͠Έͨ
࣮Λૹ৴͢ΔஈͰࢭ·ͬͨQPUBUPUJQT
ݪҼͱղઆ#include int* getArray(){int array[10];return array;// ローカル変数arrayはここで消滅する}int main(){// 配列の場所を受け取るint* array = getArray();// 配列の内容を出力for (int i = 0; i < 10; ++i){std::cout << array[i] << "\n";}}
w9DPEFͷ"EESFTT4BOJUJ[FSཔΓʹͳΔʂ·ͱΊ
w"EESFTT4BOJUJ[FSͰಠࣗ'SBNFXPSLͷϝϞϦΤϥʔΛݕग़͢Δw IUUQTRJJUBDPN4$&/&&JUFNTEFBDEDࢀߟࢿྉ
w5XJUUFS!NJOHBNFw'BDFCPPLNJOHBNFw(JU)VCUFLOJTIJ࣍ͷΞοϓσʔτͰ͠·͢ʂʮύζϧˍϞφʔΫʯධ৴தʂ