使用glGetObjectLabel进行分段错误

时间:2014-09-19 06:08:18

标签: c++ opengl

我想用glGetObjectLabel来检索标签。但是,我遇到了分段错误。这是我的代码:

const unsigned int size {GL_MAX_LABEL_LENGTH};
char label[size];
GLsizei len[size];
glGetObjectLabel(m_identifier, m_name, size, len, label);

问题是什么? Here它声明"如果不是NULL,则length和label应该是客户端具有写访问权限的地址,否则可能会发生未定义的行为,包括进程终止。"
所以我猜我的标签 len 变量出了问题。

编辑:m_name未设置为有效名称。我不知道这会导致分段错误。

1 个答案:

答案 0 :(得分:1)

代码对glGetObjectLabel()的参数有几个问题。主要是,GL_MAX_LABEL_LENGTH是用于检索最大标签长度的枚举值,而不是实际的最大标签长度。此外,第四个参数只是指向类型GLsizei的单个值的指针,而不是数组。

整件事应该是这样的:

GLint maxLabelLen = 0;
glGetIntegerv(GL_MAX_LABEL_LENGTH, &maxLabelLen);
GLchar label[maxLabelLen];
GLsizei labelLen = 0;
glGetObjectLabel(m_identifier, m_name, maxLabelLen, &labelLen, label);

但这并不能解释崩溃。看起来你在此期间想出了那个部分。传递第二个参数的无效值不应该导致崩溃。这看起来像一个驱动程序错误。调用失败并显示GL_INVALID_OPERATION错误。