gpt4 book ai didi

c++ - 如何避免在 C++ 中自动释放?

转载 作者:行者123 更新时间:2023-11-30 02:53:36 25 4
gpt4 key购买 nike

CertificateInfo 有一些 CStrings 和一些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();
}

我做错了什么,我该如何解决?

我注意到,对于 CertificateArray 中返回的 1 个 CertificateInfo,构造函数将被调用一次,而 CertificateInfo 的析构函数> 字段将被调用 3 次。

最佳答案

您正在定义一个局部变量 ca,它隐藏了您传入的参数 ca。虽然这不是这里唯一的问题,但上面的代码几乎肯定没有'做你期望它做的事。

编辑:因为您现在已经从参数中消除了局部变量的歧义:

  • 没有使用 CollectCertificatesInfo 的任何参数 - 这是故意的吗?
  • 正如其他人已经指出的那样,CertificateInfo 的实例在这里被大量复制,它的复制结构可能已损坏,但无法肯定地说,因为您没有给出我们该类的任何代码。

关于c++ - 如何避免在 C++ 中自动释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com