C++ 调试断言失败-C++;

C++ 调试断言失败-C++;,c++,debugging,assertion,C++,Debugging,Assertion,我试图在一个结构中有一个指向另一类型结构数组的指针。这是我的密码: struct Mesh { long masterRef; // The global fragment number long polygonCount; // Number of polygons in the mesh long vertexCount; // Number of verticies in the

我试图在一个结构中有一个指向另一类型结构数组的指针。这是我的密码:

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;
};
struct-Mesh
{
long masterRef;//全局片段编号
long PolygoCount;//网格中的多边形数
long vertexCount;//网格中的垂直数
Vertex*verti;//指向网格中垂直面的指针
Poly*Poly;//指向网格中多边形的指针
浮动中心[3];//网格的中心
bool isVisible;//网格当前可见吗?
}typedef网格;
结构域
{
布尔哈斯波利;
长尺寸1;
长尺寸2;
长尺寸3;
长尺寸4;
长尺寸5;
长尺寸6;
Mesh*meshptr;//包含此区域多边形的网格
长网状结构;
std::向量visvector;
长区域可见;
};
如您所见,我正在尝试在区域结构中创建网格指针。指针将指向网格数组中的网格。这一行单独导致程序崩溃,出现调试断言失败消息和“表达式:无效的空指针”


有人知道问题出在哪里吗?我会发布调用代码,但没有它就会崩溃

我认为您的问题在于“试图让结构中的指针指向结构数组”。要声明指向数组的指针,需要稍微不同的语法:
Mesh(*meshptr)[array_size]。正如您现在的结构一样,
meshptr
是指向单个
Mesh
对象的指针,而不是数组。试图像数组一样使用该指针会导致问题,因为您将直接访问指针后面的内存。这也许可以解释为什么将指针移动到数据结构的末尾似乎是可行的。这样做时,会损坏结构后面的内存,而不是损坏指针后面的结构成员。最有可能的是,您的代码损坏了结构的最后三个字段之一,并且该损坏导致了您看到的错误。将指针移到末尾可能会导致错误停止,但这并不能解决问题(您仍在破坏内存,这可能会产生许多意外的影响)


这仅仅是基于我过去所做的愚蠢事情的推测。如果没有更多的代码,就无法确定。

@James我已经完全删除了调用代码,它仍然崩溃。简单注释出线网格*meshprt;使其再次正常工作。@Satchmo Brown-给定消息-
“表达式:无效的空指针”
,请在崩溃指针处使用调试器检查
meshptr
是否指向任何有效位置。此外,您违反了三的C++规则。它不可能在没有代码的情况下崩溃:-)请您发布崩溃的线(可能是需要的上下文)?@弗拉德没有调用线。我是认真的。可能是在创建区域数组时,但当该行存在时它崩溃,而不是当它不存在时。任何地方都没有其他涉及meshptr的代码。我保证。如果你的代码在没有分配指针的情况下崩溃,那么你的程序中还有另一个问题。充其量我认为您可能正在分配堆栈变量的地址,并在以后尝试使用它,但我们确实需要一些代码。