内存在类的初始化中重叠

时间:2013-05-14 15:19:52

标签: c++ memory overlap marmalade

我的问题是我有一个头文件,我存储了所有类,在我的cpp文件中,我对这些类进行了初始化,初始化不是动态的,我有许多不同类的数组。

现在的问题是,当我开始扩展标头中的类,添加更多成员和方法时,1个特定类的初始化开始向我发出内存重叠的断言,建议使用memmove()而不是{{1虽然我在那个班级中都不使用它们。

我尝试使用降级版本替换此类,该版本在我的源代码的旧版本中有效,但它仍然向我发出相同的断言我不知道代码的哪个部分与此相关是断言正在断言在类的初始化中没有指向什么是错误的指针。

这是我对班级的初始化:

memcpy()

我正在使用带有Marmalade SDK的Visual Studio 2010,我正在用C ++编写。

感谢您的帮助,

安东

2 个答案:

答案 0 :(得分:0)

好吧,如果我们假设ShurikenShape_Verts1是常规C样式数组或C ++样式std::array并且类型为cpVect,并且cpVect是POD结构:

for(int i=0;i<5;i++)
    ShurikenShape_Verts1[i] = initShurikenShape_Verts1[i];

可以复制为:

memcpy(ShurikenShape_Verts1, initShurikenShape_Verts1, 
       sizeof(initShurikenShape_Verts1));

但是,我在这里做了一些假设,因为你没有发布足够的代码。我讨厌开始“可以发布这个,你可以发布那个”类型的线程,要求你的代码中的大量其他部分,但这也意味着我可能没有正确回答问题,因为我不例如,确定您的cpVect确实是POD结构。

答案 1 :(得分:0)

(我提交了一条评论,但我没有足够的stackoverflow“声誉”这样做: - ()

我会认真地退后一步,看看你为什么要开始复制这些东西。复制很多东西比较慢。最好使用指向现有数组或引用的指针,这取决于您的样式。

如果“cpVect只是2个浮点数被制成一个向量”你的意思是向量,那么不要使用memcpy或其他什么。这只会在以后给你堆问题。请记住,这些工作是通过幕后分配来完成的。如果你使用memcpy,你将得到两个指向相同内容的对象,当第一个超出范围时,内容将被释放。