2010年4月29日 星期四

如果sementation fault發生在STL的map中?

.

如果sementation fault發生在STL的map中,而非你寫的程式,該怎麼辦?
google了一下,大家都說是memory access跨boundary,這其實是廢話,因為sementation fault本身就imply這個事實

個人有發生過一個case,提出來供大家參考
當我在struct中宣告一個map時,這個struct能否動態被配置記憶體並使用?
答案是可以,但是在該struct被new出來後,不可以用memset去清空

如下的struct,在new出來後,若用memset去清空該struct,再去使用該struct中的map,就會出現
"程式記憶體區段錯誤"
若不清空,則就可以正常使用

struct peer_ent {
unsigned long IP; // the IP of the remote peer.
map tcp_conn_tbl; // key == lport + wport (4B)
map udp_conn_tbl; // key == lport + wport (4B)
unsigned long time; // 20100320: ????
unsigned char is_1st_pkt;
unsigned char dir; // when the peer's dir == the dir of 1st conn between the host and peer
unsigned char rsvr[2]; // reserved
};

.