2011-06-07 282 views
-2

我想在一個struct點一個指針到另一種類型的結構的數組。這裏是我的代碼:調試斷言失敗 - C++

struct Mesh 
{ 
    long masterRef;     // The global fragment number 
    long polygonCount;    // Number of polygons in the mesh 
    long vertexCount;    // Number of verticies in the mesh 
    Vertex *verti;     // Pointer to verticies in the mesh 
    Poly *poly;      // Pointer to polygons in the mesh 
    float center[3];    // The center of the mesh 
    bool isVisible;     // Is the mesh currently visible? 
} typedef Mesh; 

struct Region 
{ 
    bool hasPoly; 
    long size1; 
    long size2; 
    long size3; 
    long size4; 
    long size5; 
    long size6; 
    Mesh* meshptr; // the mesh with the polygons for this region 
    long meshRef; 
    std::vector<int> visvector; 
    long regionsVisible; 
}; 

正如你所看到的,我想創建區域結構網格指針。指針將指向網格數組中的Mesh。僅此行導致程序與調試斷言失敗的消息和崩潰「表達式:無效的空指針」

有誰知道這個問題可能是什麼?我會發布調用代碼,但它沒有它崩潰。

+3

我們需要調用代碼! – James 2011-06-07 23:41:13

+0

@James我完全刪除了調用代碼,它仍然崩潰。簡單地註釋掉Mesh * meshprt;導致它再次正常工作。 – 2011-06-07 23:44:52

+0

@Satchmo布朗 - 給出消息 - '「表達式:無效空指針」,檢查'meshptr'是否指向任何有效的位置使用調試器在崩潰的指針。你也違反了**三C++規則**。 – Mahesh 2011-06-07 23:46:57

回答

2

我認爲你的問題是,你「想有一個結構點的指針結構數組」。要聲明一個指向數組的指針,你需要一個稍微不同的語法:Mesh (*meshptr)[array_size];。由於您的結構立即可用,meshptr是指向單個對象而不是數組的指針。試圖像數組那樣使用該指針會導致問題,因爲您將直接訪問指針後面的內存。這可以解釋爲什麼將指針移動到數據結構的末尾似乎有效。當你這樣做的時候,你會破壞結構之後的內存,而不是破壞指針後面的結構成員。最有可能的是,您的代碼破壞了結構的最後三個字段之一,並且該錯誤導致了您所看到的錯誤。將指針移動到最後可能會導致錯誤停止,但它不能解決問題(您仍在破壞內存,可能會產生許多意想不到的效果)。

這僅僅是基於我在過去所做的那樣愚蠢的事情的猜測。沒有更多的代碼,就無法確定。