ACertificateInfo
有一些CStrings and some
CTimes`。
当执行到达 CheckCertificates 的右括号时,由于堆损坏,它会中断执行。最后一个调用堆栈帧
CSWizard.exe!_CrtIsValidHeapPointer(const void * pUserData=0x00ba8e08)
来自 deallocating 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 CertificateArray
,构造函数将被调用一次,而CertificateInfo
字段的析构函数将被调用 3 次。