Я только начал изучать библиотеку OpenGL.
В настоящее время я слежу за видеоруководством по OpenGL.
Учитывая следующий фрагмент кода, чтобы получить сообщение об ошибке для компиляции шейдеров
int result;
glGetShaderiv(id, GL_COMPILE_STATUS, &result);
if (result == GL_FALSE)
{
int length;
glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length);
char *message = (char *)alloca(length * sizeof(char));
glGetShaderInfoLog(id, length, &length, message);
std::cout << "Failed to compile " << (type == GL_VERTEX_SHADER ? "vertex" : "fragment")
<< " shader" << std::endl;
std::cout << message << std::endl;
glDeleteShader(id);
return 0;
}
В следующем видео лектор попытался сначала инициализировать сообщение следующим образом:
char message[length];
Однако, поскольку длина не является константой, она не будет компилироваться.
Он решил использовать функцию alloca.
char *message = (char *)alloca(length * sizeof(char));
Однако, когда я запустил его через cppCheck, он говорит:
Устаревшая функция 'alloca ' называется. В C ++ 11 и более поздних версиях рекомендуется использовать вместо него std :: array <> или динамически размещаемый массив. Функция alloca опасна по многим причинам ( Почему использование alloca () не считается хорошей практикой? и http://linux.die.net/man/3/alloca).
Есть ли какая-либо альтернатива функции alloca, которая все еще позволяет выделять стековую память для сообщения?