0

我已经声明了以下类型的向量:

vector<CDFE> vDFE;

其中 CDFE 是一个类,它包含一个变量double usage

我通过如下指针访问它,例如:

pDoc->vDFE.at(i).usage;

我正在创建一个临时向量,如下所示,因为我不想修改vDFE.

vector<CDFE> tempDFE(pDoc->vDFE);

但是当我运行程序时,它会进入一些功能_CrtIsValidHeapPointer()

我究竟做错了什么?

非常感谢您的帮助。

以下是一些代码:

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;
}
4

2 回答 2

1

该错误是由于内存损坏。将向量与类对象一起使用而不使用任何类型的复制构造函数通常是一个坏主意。在这种情况下,同一个内存地址可能会被多次释放;导致可能的内存损坏。

现在可能还有其他可能的问题,例如,如果您将其构建为 DLL,那么也可能会出现一些堆损坏,具体取决于您如何将代码与其他模块/应用程序链接。

希望这会有所帮助,问候。

于 2013-05-31T14:34:01.570 回答
0

我不确定pDoc->DFE在做什么。你不是说pDoc->vDFE吗?

调试消息发出内存问题的信号。

你有没有调整向量的大小?试一下,例如,

vector<CDFE> vDFE(10);

这将创建一个具有 10 个默认构造的 CFDE 的向量。

确保 i 不大于 9。

于 2013-05-31T13:30:20.987 回答