J'ai déclaré un vecteur du type suivant:Copie un vecteur et le code va à _CrtIsValidHeapPointer()
vector<CDFE> vDFE;
où CDFE est une classe et il contient une double usage
variable.
J'accède à travers un pointeur comme ci-dessous, par exemple .:
pDoc->vDFE.at(i).usage;
Je crée comme ci-dessous un vecteur temporaire parce que je ne veux pas modifier vDFE
.
vector<CDFE> tempDFE(pDoc->vDFE);
Mais quand je lance le prog, il va à une fonction _CrtIsValidHeapPointer()
Qu'est-ce que je fais mal?
Votre aide est grandement appréciée.
Ce qui suit est un code:
class CDFE : public CRect
{
public:
CDFE();
virtual ~CDFE();
double usage;
}
void CRXView::OnDraw(CDC* pDC)
{
CRXDoc* pDoc = GetDocument();
vector<CDFE> tempDFE(pDoc->vDFE);
}
CRXDoc* CRXView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRXDoc)));
return (CRXDoc*)m_pDocument;
}
Plusieurs raisons possibles, la corruption du tas n'est jamais si difficile. Regardez d'abord la Règle des Trois et assurez-vous de l'avoir appliqué sur votre classe CDFE et que son constructeur de copie et son opérateur d'affectation sont solides. –
Est-ce que cela produit une erreur? Je crois que cette fonction est juste une vérification que le pointeur est valide. – Angew
Quelle ligne déclenche le comportement? Pouvez-vous passer en revue avec le débogueur et voir exactement quelle ligne provoque votre programme à la faute? – Jimbo