Ошибка отладки - C ++ - PullRequest
0 голосов
/ 08 июня 2011

Я пытаюсь получить указатель в структурной точке на массив структур другого типа. Вот мой код:

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;
};

Как видите, я пытаюсь создать указатель сетки в структуре Region. Указатель будет указывать на сетку в массиве сетки. Одна только эта строка вызывает сбой программы с сообщением об ошибке подтверждения отладки и «Выражение: недействительный нулевой указатель»

Кто-нибудь знает, в чем может быть проблема? Я бы опубликовал код вызова, но он не работает без него.

1 Ответ

2 голосов
/ 08 июня 2011

Я думаю, что ваша проблема в том, что вы «пытаетесь получить указатель в структурной точке на массив структур». Чтобы объявить указатель на массив, вам нужен немного другой синтаксис: Mesh (*meshptr)[array_size];. В настоящее время ваша структура стоит meshptr - это указатель на один объект Mesh, а не массив. Попытка использовать этот указатель как массив вызовет проблемы, так как вы будете иметь прямой доступ к памяти после указателя. Это может объяснить, почему перемещение указателя на конец структуры данных, кажется, работает. Когда вы делаете это, вы повреждаете память, следующую за структурой, вместо того, чтобы разрушать элементы структуры, следующие за указателем. Скорее всего, ваш код повредил одно из последних трех полей структуры, и это повреждение вызвало ошибку, которую вы видите. Перемещение указателя в конец может привести к остановке ошибки, но это не решает проблему (вы все еще повреждаете память, что может привести к неожиданным последствиям).

Это просто предположение, основанное на глупых вещах, которые я делал в прошлом. Не имея больше вашего кода, невозможно сказать наверняка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...