从函数</point>返回std :: vector <point>时出现“堆的损坏”错误

时间:2013-04-17 08:10:10

标签: c++ dll stl heap-corruption

我正面临堆损坏错误:我有一个dll和TestAPP。

  1. vector<Point> vInPts; //测试应用程序 - 转储输入如下

    vInPts.push_back(Point(730,405));
    vInPts.push_back(Point(319,680));
    vInPts.push_back(Point(292,757));
    vInPts.push_back(Point(318,756));
    vInPts.push_back(Point(726,736));
    vInPts.push_back(Point(344,731));
    
  2. vector<Point> vOutPts;

  3. 调用DLL - &gt;将同一vInPts向量复制到DLL中的vOutPts向量“ - &gt;从此函数返回到TestApp时 - >出现堆错误。现在面对堆错误enter image description here

  4. 如何修复此堆错误?
    在此先感谢!!!

1 个答案:

答案 0 :(得分:2)

阅读Point课程的实际定义会很有趣。它是否可以正确复制?

此外,由于您使用的是DLL和带有STL类的EXE,请确保DLL和EXE都使用动态链接构建到相同的CRT风格< / strong>(例如,两者都使用相同版本的C ++编译器构建,并使用相同的设置,例如发布构建DLL以及发布版本EXE等)。

事实上,STL类的实现在发布版本和调试版本中有所不同(例如,在调试版本中,迭代器验证等检查会产生更多开销。) 如果在EXE和DLL之间共享STL类,则它必须是相同的类,而不是具有相同名称但具有不同实现的类。