std::矢量在 MFC CArray 中 - 在将元素添加到 CArray 后出现"iterator not dereferencable"错误
std::vector inside MFC CArray - getting "iterator not dereferencable" error after adding elements to the CArray
在我们的代码中,我们使用了stl和MFC容器。我遇到过这样一种情况:我们有一个对象数组,其中每个对象都包含一个std::vector。
在向CArray中添加多个对象后,使得CArray中的数据在达到最大大小时将被重新分配和复制,看起来内部向量被损坏了。当我遍历数组,并对每个对象遍历std::vector时,我得到了一个"vector迭代器不可解引用"的错误。
我看了MFC代码,它使用memcpy()在重新分配后复制数据。在std::vector(我使用visual studio)中,有一个名为_Myproxy的成员,它有一个名为_Mycont的成员,它似乎改变了它在新向量中的值(由memcpy()复制的向量)。
我复制了这个问题,我将示例代码附在下面。
我可以重构这段代码,我可能会这样做,但我想确切地了解发生了什么。
#include "stdafx.h"
#include <vector>
#include <iostream>
// an object which holds an std::vector
class test_t
{
public:
test_t() {}
~test_t()
{
std::cout << "d'tor" << std::endl;
}
void add(int i)
{
m_vec.push_back(i);
}
void print()
{
for (std::vector<int>::iterator it = m_vec.begin(); it != m_vec.end(); ++it)
{
int i = *it;
std::cout << i << std::endl;
}
std::cout << std::endl;
}
private:
std::vector<int> m_vec;
};
void test()
{
// array if objects where each object holds an std::vector
CArray<test_t, test_t&> arr;
for (int i = 0; i < 10; ++i)
{
test_t t;
int j = arr.Add(t);
test_t& rt = arr[i];
rt.add(1);
rt.add(2);
rt.add(3);
}
for (int i = 0; i < arr.GetSize(); ++i)
{
test_t& rt = arr[i];
rt.print(); // error occurs here
}
}
谢谢,加布里埃尔
CArray
不适合非pod类型,在调整大小时依赖memcpy_s
。您可以使其工作,但通常在此用例中最好避免使用。
请看这里的注释:https://msdn.microsoft.com/en-us/library/4h2f09ct.aspx
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- 方法错误"not all control paths return a value"和方法不返回值
- Centos7 g++ "to_string is not in a member of std"
- 将系数存储在头文件的数组中("does not name a type"错误)
- QGraphicsItems not showing up QGraphicsScene
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- std::矢量在 MFC CArray 中 - 在将元素添加到 CArray 后出现"iterator not dereferencable"错误