此问题与SO
中名称相似的人不重复众所周知,如果DLL是静态链接的(/ MT标志在 MSVC),已分配内存的DLL必须解除分配;除此以外 内存释放将导致运行时错误。
问题在于:
std::vector
,比如A
。 A
将向量传递给DLL,比如B
。B
将数据插入到矢量中。A
试图破坏向量,它将面临错误。我已经发现,如果我在将向量传递给std::vector::reserve
之前使用B
,要使向量足够大以容纳数据并防止内存重新分配 - 通常在项目插入期间发生 - 然后在尝试破坏向量时,我在A
中没有收到错误。似乎在内存重新分配的情况下,B
为其自己的堆中的向量分配。我的推理错了吗?我该如何防止这种情况?
答案 0 :(得分:3)
最简单的方法是隐藏从dll公开的vector
内部方法,这样你就可以在其他dll中查看const vector
,但不能修改它。然后在dll B中创建一个新函数,代表调用者将该条目添加到向量中。
因此,您的vector
仍然隐藏在dll B中以进行所有修改。