C++ glGetFloatv导致堆栈崩溃

C++ glGetFloatv导致堆栈崩溃,c++,opengl,gcc,stack,stack-smash,C++,Opengl,Gcc,Stack,Stack Smash,当使用GCC编译时,这会导致堆栈崩溃 void MyOpenGLLineClass::set_width (float x) { float max = 1; glGetFloatv (GL_ALIASED_LINE_WIDTH_RANGE, &max); if (false == (x > 0 && x <= max)) throw std::invalid_argument (__PRETTY_FUNCTION_

当使用GCC编译时,这会导致堆栈崩溃

void MyOpenGLLineClass::set_width (float x)
{
    float max = 1;

    glGetFloatv (GL_ALIASED_LINE_WIDTH_RANGE, &max);

    if (false == (x > 0 && x <= max))
        throw std::invalid_argument (__PRETTY_FUNCTION__);

    m_width = x;
}
为什么会发生此堆栈崩溃?

根据,
glGetFloatv
with
GL\u ALIASED\u LINE\u WIDTH\u RANGE
返回两个值:

GL_锯齿_线条_宽度_范围

params返回两个值,即别名线支持的最小和最大宽度

因此,第二个值调用UB并粉碎堆栈

固定的:

void MyOpenGLLineClass::set_width (float x)
{
    float range[] = {0,0};

    glGetFloatv (GL_ALIASED_LINE_WIDTH_RANGE, range);

    if (false == (x >= range[0] && x <= range[1]))
        throw std::invalid_argument (__PRETTY_FUNCTION__);

    m_width = x;
}
void myopenglineclass::设置\u宽度(浮点x)
{
浮动范围[]={0,0};
glGetFloatv(GL_别名_线宽_范围,范围);
如果(false==(x>=范围[0]&&x
void MyOpenGLLineClass::set_width (float x)
{
    float range[] = {0,0};

    glGetFloatv (GL_ALIASED_LINE_WIDTH_RANGE, range);

    if (false == (x >= range[0] && x <= range[1]))
        throw std::invalid_argument (__PRETTY_FUNCTION__);

    m_width = x;
}