"_CrtIsValidHeapPointerUserData means, that you have a heap corruption, which is noticed by debug heap checker. Suspect everybody who can write any information into any deleted dynamic object".
_CrtIsValidHeapPointerUserData 意味着堆崩潰。
假設有語句char* p = new char[256];
delete[]p;
delete時發生上述中斷,最好仔細檢查在程序的中途是否改變了p指針的指向。
我的語句是這樣寫的:
Protein_Index_Table *pro_idx_table = new Protein_Index_Table[max_idxTable_size]; //index datda delete[]pro_idx_table;
發生異常的時候,我以為是由於結構體的原因,可能不能對結構體變量使用new和delete,查閱msdn delete沒有發現說delete不能用於結構體,
仔細檢查,發現自己誤寫了一句:
pro_idx_table[pro_idx_table_len].AC_Pos = ftell(ac_fp); pro_idx_table[pro_idx_table_len].DE_Pos = ftell(de_fp); pro_idx_table[pro_idx_table_len].SQ_Pos = ftell(sq_fp); fwrite(pro_idx_table + pro_idx_table_len, sizeof(Protein_Index_Table), 1, index_fp); pro_idx_table++;
pro_idx_table++應該是pro_idx_table_len++.