-4

私の問題は、すべてのクラスを格納するヘッダー ファイルがあり、cpp ファイルにこれらのクラスの初期化があることです。初期化は動的ではなく、さまざまなクラスの配列が多数あります。

問題は、ヘッダーでクラスの拡張を開始し、メンバーとメソッドを追加し始めたときです。1 つの特定のクラスの初期化により、メモリが重複しているというアサーションがスローされ始め、memmove()代わりに を使用するよう提案されmemcpy()ましたが、そのクラスではどちらも使用しませんでした。

このクラスを古いバージョンのソースで動作するダウングレード バージョンに置き換えようとしましたが、それでも同じアサーションがスローされました。コードのどの部分が関連しているかはわかりません。アサーションは初期化でアサートされています。正確に何が間違っているかへのポインタなしでクラスの。

これは私のクラスの初期化です:

Shuriken(cpFloat m,cpVect veloc,cpFloat elast,cpFloat myu) : Spark() , Bang1() , ShurikenFlame()
{
smass = m;
sv = veloc;
se = elast;
su = myu;
ToDraw = false;
Removed = true;
AllocatedBombAnim = false;
DrawFlamedShuriken = false;
DeployFlameBang = false;
PassedLine = false;
hitfruit = false;
FruitIsBeingHit = false;
ToRemoveBody = false;
DummyAdded = false;
HitBossBanana = false;
fruitnum = 11;//11 means it has no fruit
Sec_FlameCounter = 3;

LitShuriken_UVs[0] = CIwFVec2(0, 0);
LitShuriken_UVs[2] = CIwFVec2(1.0/4, 1.0/4);
LitShuriken_UVs[3] = CIwFVec2(1.0/4, 0);
LitShuriken_UVs[1] = CIwFVec2(0, 1.0/4);

Sparkle_UVs[0] = CIwFVec2(0, 0);
Sparkle_UVs[2] = CIwFVec2(1.0/2, 1.0/4);
Sparkle_UVs[3] = CIwFVec2(1.0/2, 0);
Sparkle_UVs[1] = CIwFVec2(0, 1.0/4);

lastPos = cpvzero;
lastAngle = 0;

struct cpVect initShurikenBody_Verts[35] = 
{
    cpv(-128.01,41.26),
    cpv(-58.74,45.42),
    cpv(-47.79,32.04),
    cpv(-40.06,33.94),
    cpv(-20.63,48.29),
    cpv(-16.13,55.67),
    cpv(-25.33,69.7),
    cpv(0,134.67),
    cpv(25.34,70.16),
    cpv(16.14,55.67),
    cpv(20.75,48.1),
    cpv(39.98,34.04),
    cpv(47.96,32.15),
    cpv(58.86,45.38),
    cpv(128.01,41.26),
    cpv(74.55,-2.82),
    cpv(57.95,1.45),
    cpv(52.25,-5.19),
    cpv(45.16,-26.79),
    cpv(45.77,-35.34),
    cpv(61.86,-41.64),
    cpv(79.1,-108.95),
    cpv(20.79,-71.41),
    cpv(19.62,-54.33),
    cpv(11.91,-51.14),
    cpv(-12.02,-51.11),
    cpv(-19.64,-54.26),
    cpv(-20.81,-71.4),
    cpv(-79.11,-108.95),
    cpv(-61.87,-41.6),
    cpv(-45.77,-35.03),
    cpv(-45.18,-26.75),
    cpv(-52.23,-5.35),
    cpv(-57.88,1.31),
    cpv(-74.48,-2.8),
}; 

struct cpVect initShurikenShape_Verts1[5] = 
 {
    cpv(-128.01,41.26),
    cpv(-58.74,45.42),
    cpv(-47.79,32.04),
    cpv(-57.88,1.31),
    cpv(-74.48,-2.8),
 };

struct cpVect initShurikenShape_Verts2[5] = 
 {
    cpv(0,134.67),
    cpv(25.34,70.16),
    cpv(16.14,55.67),
    cpv(-16.13,55.67),
    cpv(-25.33,69.7),
 };

struct cpVect initShurikenShape_Verts3[5] = 
 {
    cpv(47.96,32.15),
    cpv(58.86,45.38),
    cpv(128.01,41.26),
    cpv(74.55,-2.82),
    cpv(57.95,1.45),
 };

struct cpVect initShurikenShape_Verts4[5] = 
 {
    cpv(79.1,-108.95),
    cpv(20.79,-71.41),
    cpv(19.62,-54.33),
    cpv(45.77,-35.34),
    cpv(61.86,-41.64),
 };

struct cpVect initShurikenShape_Verts5[5] = 
 {
    cpv(-79.11,-108.95),
    cpv(-61.87,-41.6),
    cpv(-45.77,-35.03),
    cpv(-19.64,-54.26),
    cpv(-20.81,-71.4),
 };

struct cpVect initShurikenShape_Verts6[4] = 
 {
    cpv(-47.79,32.04),
    cpv(-40.06,33.94),
    cpv(-52.23,-5.35),
    cpv(-57.88,1.31),
 };

struct cpVect initShurikenShape_Verts7[4] = 
 {
    cpv(-20.63,48.29),
    cpv(-16.13,55.67),
    cpv(16.14,55.67),
    cpv(20.75,48.1),
 };

struct cpVect initShurikenShape_Verts8[4] = 
 {
    cpv(39.98,34.04),
    cpv(47.96,32.15),
    cpv(57.95,1.45),
    cpv(52.25,-5.19),
 };

struct cpVect initShurikenShape_Verts9[4] = 
 {
    cpv(45.16,-26.79),
    cpv(45.77,-35.34),
    cpv(19.62,-54.33),
    cpv(11.91,-51.14),
 };

struct cpVect initShurikenShape_Verts10[4] = 
 {
    cpv(-12.02,-51.11),
    cpv(-19.64,-54.26),
    cpv(-45.77,-35.03),
    cpv(-45.18,-26.75),
 };

struct cpVect initShurikenShape_Verts11[10] = 
 {
    cpv(-40.06,33.94),
    cpv(-20.63,48.29),
    cpv(20.75,48.1),
    cpv(39.98,34.04),
    cpv(52.25,-5.19),
    cpv(45.16,-26.79),
    cpv(11.91,-51.14),
    cpv(-12.02,-51.11),
    cpv(-45.18,-26.75),
    cpv(-52.23,-5.35),
 };

for(int i=0;i<5;i++)
    ShurikenShape_Verts1[i] = initShurikenShape_Verts1[i];
for(int i=0;i<5;i++)
    ShurikenShape_Verts2[i] = initShurikenShape_Verts2[i];
for(int i=0;i<5;i++)
    ShurikenShape_Verts3[i] = initShurikenShape_Verts3[i];
for(int i=0;i<5;i++)
    ShurikenShape_Verts4[i] = initShurikenShape_Verts4[i];
for(int i=0;i<5;i++)
    ShurikenShape_Verts5[i] = initShurikenShape_Verts5[i];
for(int i=0;i<4;i++)
    ShurikenShape_Verts6[i] = initShurikenShape_Verts6[i];
for(int i=0;i<4;i++)
    ShurikenShape_Verts7[i] = initShurikenShape_Verts7[i];
for(int i=0;i<4;i++)
    ShurikenShape_Verts8[i] = initShurikenShape_Verts8[i];
for(int i=0;i<4;i++)
    ShurikenShape_Verts9[i] = initShurikenShape_Verts9[i];
for(int i=0;i<4;i++)
    ShurikenShape_Verts10[i] = initShurikenShape_Verts10[i];
for(int i=0;i<10;i++)
    ShurikenShape_Verts11[i] = initShurikenShape_Verts11[i];
for(int i=0;i<35;i++)
    ShurikenBody_Verts[i] = initShurikenBody_Verts[i];
}

私は Marmalade SDK で Visual Studio 2010 を使用しており、C++ で書いています。

助けてくれてありがとう、

アントン

4

2 に答える 2

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構造体であることを確実に知りません。

于 2013-05-14T16:31:12.950 に答える