ACertificateInfo
にはいくつかのCStrings and some
CTimes` があります。
実行が CheckCertificates の右中括弧に達すると、ヒープの破損により実行が中断されます。最後のコール スタック フレームは
CSWizard.exe!_CrtIsValidHeapPointer(const void * pUserData=0x00ba8e08)
、割り当て解除からのものaCertificates
です。
typedef vector<CertificateInfo> CertificateArray;
CertificateArray CertificateStore::CollectCertificatesInfo(CertificateArray &ca,
bool bExpirationDateOnly /* = false */,
bool bCertSignOnly /* = true */)
{
CertificateArray aCertificates;
while(Precondition())
{
CertificateInfo ci;
if(Condition(ci))
{
aCertificates.push_back(ci);
}
}
return aCertificates;
}
void CSWizardApp::CheckCertificates(bool bOnDemand)
{
PersonalStore store;
CertificateArray aCertificates;
aCertificates = store.CollectCertificatesInfo();
}
私は何を間違っていますか?どうすれば修正できますか?
私が気づいたのは、 でCertificateInfo
返された1 に対して、コンストラクターが 1 回呼び出され、フィールドCertificateArray
のデストラクタが3 回呼び出されることです。CertificateInfo