C++ glGetFloatv导致堆栈崩溃
当使用GCC编译时,这会导致堆栈崩溃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_
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
withGL\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;
}