我有一个程序在长时间运行时会因“访问冲突”而间歇性崩溃。调试后,我遇到了一个非常奇怪的现象。
该程序在将一个分配(复制)std::vector
到另一个的代码上崩溃,如下所示:
struct Data
{
int int1;
int int2;
}
//vec1 is empty
//vec2 contains a couple of thousands Data structs
std::vector<struct Data> vec1 = vec2;//**crash happens here**
发生的事情很简单——STL 为 分配一个内存块vec1
,然后从中vec2
复制数据。分配顺利。当 STL 尝试vec1
用来自vec2
. 更奇怪的是,该复制过程的某些部分被正确执行,而崩溃发生在该过程中间的某个地方。
我的问题是 - 新分配的内存块如何“部分”不可写?谢谢你。
编辑:伙计们,我并不是说这段代码有问题——当然没有。我在问为什么这种类型的代码会崩溃?即我的程序的另一部分如何修改STL新分配的内存块?以及如何调试这种内存损坏?
是的,这是真正的代码
补充:我已经启用页堆来查看问题是否发生在这段代码执行之前。它什么也没抓住。