簡體   English   中英

C ++指針和數組

[英]C++ pointers and arrays

我對動態數組有問題。

在頭文件類中,我有這個:

class CTerrain
{
    ...
    CRock *rocks;
int numRocks;//=0
    ...
}

在cpp中,我有這個:

void CTerrain::Create()
{
    numRocks = 0;
    int NUM_ROCKS = rand()%10+1;
        for(int i=0;i<NUM_ROCKS;i++)
        {
            rocks = new CRock;
            numRocks++;
            ...
        }
 }
 void CTerrain::Render()
 {
     for(int i=0;i<numRocks;i++)
     rocks[i].render();//it works ok when here is 0 instead of 'i'
 }

當我運行此代碼時,出現錯誤:OpenGL.exe中0x00913aea處未處理的異常:0xC0000005:訪問沖突讀取位置0x1c00001f。

感謝您的幫助,我已經嘗試解決此問題大約4個小時了...

編輯:

好的,所以我將Create()方法更改為:

void CTerrain::Create()
{
    numRocks = 0;
    int NUM_ROCKS = rand()%10+1;
    rocks = new CRock[NUM_ROCKS];
        for(int i=0;i<NUM_ROCKS;i++)
        {
        rocks[i].position = ...
            numRocks++;
            ...
        }

並且還添加了delete []岩石,現在可以正常工作了。

您的Create函數將更像

void CTerrain::Create()
{
    int NUM_ROCKS = rand()%10+1;
    rocks = new CRock[NUM_ROCKS];
    numRocks = NUM_ROCKS;
    for(int i=0; i<NUM_ROCKS; i++)
    {
        rocks[i] = CRock{};
    }
}

只是為以上答案添加一點解釋。 這里:

 for(int i=0;i<NUM_ROCKS;i++)
 {
            rocks = new CRock;
            numRocks++;
            ...
 }

您要做的是,每次將CRock 實例分配給指針rock 從而丟失了對舊對象的引用並導致內存泄漏。 使用Cyber​​提供的類似建議的解決方案。

rocks = new CRock;

您會CRock*覆蓋該行中的CRock*指針

用這個

rocks = new CRock[NUM_ROCKS];

首先,岩石是指向 CRocks的指針 您的實現:rocks [i] .render()應該是這樣的:

岩石=新CRock [x]; (其中x是CRock類型的對象數。)

岩石[i]-> render()。

刪除岩石[i] //一定要刪除。

您可能需要參考此信息,以獲取有關如何處理動態對象數組的解決方案。

這另一個參考是好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM