2016-11-27 8 views
1

私は現在C++でゲームをプログラミングしており、SDL 2.0ライブラリで作業しています。C++ - UInt32のヒープ破壊*

テクスチャから32x32イメージを切り取りてタイルとして保存しようとしていて、テクスチャのピクセルから再作成しようとしています。このコードを実行してforループでUint32 *を編集しようとすると編集できますが、イメージを作成しようとするとヒープが破損します。

は、私は現在、このコードを実行している:

Uint32* pixels = (Uint32*)m_pSprite->GetPixels(); 
int pixelCount = (m_pSprite->GetPitch()/4) * m_pSprite->GetHeight(); 

int tileOffset = 0; 
int spriteSheetOffset = 0; 
int widthOffset = m_pSprite->GetWidth(); 

Uint32* tilePixels = new Uint32(32); 
for (int y = 0; y < 32; y++) 
{ 
    tileOffset = (y * 32); 
    spriteSheetOffset = (y * widthOffset); 
    for (int x = 0; x < 32; x++) 
    { 
     tilePixels[tileOffset + x] = pixels[spriteSheetOffset + x]; 
    } 
} 

int tilePitch = 32*4; 
SDL_Texture* texture = SDL_CreateTexture(backBuffer.GetRenderer(), SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_TARGET, TILE_WIDTH, TILE_HEIGHT); 

私は*変数Uint32のに何か問題があることがわかりますと、これは明らかにベストプラクティスではないことが、私はまだ何ができるのまわりで私の頭をラップしていますできないことがあり、何が最善の方法なのですか。

何が起きているのか誰かが説明していますか?

答えて

3
Uint32* tilePixels = new Uint32(32); 

これは動的単一Uint32を割り当て、その値32に構築/初期化されます。 32 * 32 アレイが欲しいと思われます。あなたの配列のサイズは、(コンパイル時に知られている)は、静的であることから、それはだけではなく、動的なスタック割り当ての配列を使用するのが最善だろう、けれども

Uint32* tilePixels = new Uint32[32*32]; // brackets allocate an array 

:これを試してみてください

Uint32 tilePixels[32*32]; 

修正するかどうか確認してください。

+0

ありがとうございます!そのトリックをするように見えた=) –