C ++: Unnitialized (?) Массив в стеке (пример, касающийся OpenGL) - PullRequest
0 голосов
/ 03 января 2011

Каково содержимое массива, созданного в стеке, но в котором нет значений? Как это:

int array[4]
cout << array[2];

Я спрашиваю это, потому что я всегда видел в OpenGL, когда генерируются текстуры, это делается так:

GLuint textures[4];
glGenTextures(4, &textures[0]);

glBindTexture(GL_TEXTURE_2D, textures[2]);

Какое с этим дело?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 03 января 2011
  1. Содержимое может быть любым. Часто это что-то остается от предыдущей функции, но никаких гарантий не делается.

  2. glGenTextures заполняет второй аргумент, который передается указателем. Ничто не использует неинициализированное значение. Также как textures[0] = 0;, он перезаписывает любой мусор.

3 голосов
/ 03 января 2011

В этом случае второй аргумент glGenTextures - это возвращение, а не ввод.По сути, он заполняет массив textures [4] четырьмя идентификаторами текстур, которые можно использовать позже.

Унифицированная память - это почти случайный мусор, оставшийся от предыдущих процессов / распределений.Всегда следует считать ошибкой чтение из неинициализированной переменной перед присвоением значения.

0 голосов
/ 03 января 2011

Значения неинициализированы, но массив безопасен для использования. glGenTextures заполняет элементы инттами, которые являются дескрипторами слотов текстуры.

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