最近編程過(guò)程中遇到的一個(gè)BUG.
首先我來(lái)描述一下,這個(gè)BUG是CString類的使用引起的,在編程過(guò)程中有個(gè)默認(rèn)的規(guī)則,就是CStirng, std::string這種變長(zhǎng)的數(shù)據(jù)類型是不可以做為模塊參數(shù)進(jìn)行傳遞和調(diào)用, 因?yàn)闀?huì)引起崩潰, 這種情況我
也遇到過(guò),但是這個(gè)錯(cuò)誤并不是因?yàn)樽鰹槟K參數(shù)而引起的,而是因?yàn)榘珻string 的結(jié)構(gòu)體,在類定義時(shí),
成員變量的順序引起的,也就說(shuō)將包含CSting類的結(jié)構(gòu)體放在某個(gè)變量(這個(gè)變量是一個(gè)指針連表)前時(shí),會(huì)出錯(cuò),而放變量的后面就不出錯(cuò),原因是因?yàn)榘珻String類的結(jié)構(gòu)體在一個(gè)線程中進(jìn)行了修改,因?yàn)镃String類是變長(zhǎng)的,所以寫(xiě)入了大量的數(shù)據(jù)。使得CString類的地址覆蓋了,它前面變量的地址,所以在程序退出時(shí),刪除錯(cuò)誤的指針地址,造成崩潰。
首先我來(lái)描述一下,這個(gè)BUG是CString類的使用引起的,在編程過(guò)程中有個(gè)默認(rèn)的規(guī)則,就是CStirng, std::string這種變長(zhǎng)的數(shù)據(jù)類型是不可以做為模塊參數(shù)進(jìn)行傳遞和調(diào)用, 因?yàn)闀?huì)引起崩潰, 這種情況我
也遇到過(guò),但是這個(gè)錯(cuò)誤并不是因?yàn)樽鰹槟K參數(shù)而引起的,而是因?yàn)榘珻string 的結(jié)構(gòu)體,在類定義時(shí),
成員變量的順序引起的,也就說(shuō)將包含CSting類的結(jié)構(gòu)體放在某個(gè)變量(這個(gè)變量是一個(gè)指針連表)前時(shí),會(huì)出錯(cuò),而放變量的后面就不出錯(cuò),原因是因?yàn)榘珻String類的結(jié)構(gòu)體在一個(gè)線程中進(jìn)行了修改,因?yàn)镃String類是變長(zhǎng)的,所以寫(xiě)入了大量的數(shù)據(jù)。使得CString類的地址覆蓋了,它前面變量的地址,所以在程序退出時(shí),刪除錯(cuò)誤的指針地址,造成崩潰。