Проблемы с доступом к предопределенному массиву с плавающей точкой в ​​C ++ - PullRequest
2 голосов
/ 06 ноября 2010

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

Предварительно рассчитанные значения представляют собой координаты куба, отображенные на сферу, а структура данных принимаетформа:

typedef float heightMapCubeFace[5][5][3];

Я определяю каждое лицо отдельно так:

    heightMapCubeFace face1 = {{{ -2.88675, -2.88675, -2.88675 }, { -3.38502, -3.38502, -1.44338 }, { -3.53553, -3.53553, 0 }, { -3.38502, -3.38502, 1.44338 }, { -2.88675, -2.88675, 2.88675}}, 
{{ -1.44338, -3.38502, -3.38502 }, { -1.69251, -4.38986, -1.69251 }, { -1.76777, -4.67707, 0 }, { -1.69251, -4.38986, 1.69251 }, { -1.44338, -3.38502, 3.38502}}, 
{{ 0, -3.53553, -3.53553 }, { 0, -4.67707, -1.76777 }, { 0, -5, 0 }, { 0, -4.67707, 1.76777 }, { 0, -3.53553, 3.53553}}, 
{{ 1.44338, -3.38502, -3.38502 }, { 1.69251, -4.38986, -1.69251 }, { 1.76777, -4.67707, 0 }, { 1.69251, -4.38986, 1.69251 }, { 1.44338, -3.38502, 3.38502}}, 
{{ 2.88675, -2.88675, -2.88675 }, { 3.38502, -3.38502, -1.44338 }, { 3.53553, -3.53553, 0 }, { 3.38502, -3.38502, 1.44338 }, { 2.88675, -2.88675, 2.88675}} 
}; 

и, наконец,

heightMapCubeFace * heightMapSaved[6] = {&face1, &face2, &face3, &face4, &face5, &face6};

Со временем структура данных будет больше.Просто установите его на 5x5, чтобы сначала было легче.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я хочу вернуть значения, происходит что-то странное и, как следствие, нарушения доступа.

Как показано на следующем изображении

Как видите, назначенное значение не соответствует значению структуры данных.Вместо значения для индекса [0][0][0][1] дается значение индекса [0][0][1][0]. здесь

Я понял это, потому что на более позднем этапе возникает неэкранированное исключение (нарушение доступа), я думаю, что это из-за проблемы с индексом, но не может быть уверенной.

Я не понимаю, что происходит, я неправильно разыменую указатель?

Любая помощь будет очень ценной, спасибо.

Вот код для этого раздела:

    for(int i = 0; i < 6; i++)
    {    
        for(int j = 0; j < heightMapRes; j++)
        {
            for(int k = 0; k < heightMapRes; k++)
            {
                float xCoord =  *(heightMapSaved[i][j][k][0]);
                float yCoord =  *(heightMapSaved[i][j][k][1]);
                float zCoord =  *(heightMapSaved[i][j][k][2]);

                float newValue = myModule.GetValue( xCoord, yCoord, zCoord);

                heightMap.SetValue( j, k, newValue);
            }
        }
    }

1 Ответ

3 голосов
/ 06 ноября 2010

макет (heightMapSaved[6])[5][5][3] не (heightMapSaved[5][5][3][6])

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