【发布时间】:2019-03-07 07:30:32
【问题描述】:
我正在尝试查找 android 上报告的以下崩溃的原因:
在 (operator new(unsigned int)+22) 处崩溃
这是否意味着内存分配不成功?如果是这样,添加 std::nothrow 和 null 检查并退出程序是正确的解决方案?
有没有办法限制程序不分配以重现它?
崩溃的代码:
glCompileShader( VSID );
GLint vstat;
glGetShaderiv( VSID, GL_COMPILE_STATUS, &vstat );
if( vstat != GL_TRUE )
{
GLint infolen;
glGetShaderiv( VSID, GL_INFO_LOG_LENGTH, &infolen );
GLchar* infostring = new GLchar[infolen + 1];
glGetShaderInfoLog( VSID, infolen, nullptr, infostring );
infostring[infolen] = 0;
std::stringstream Error;
Error << "An Error occured while trying to compile"\
" Vertex Shader \"" << VertexShaderPath
<< "\":\n\n" << infostring;
}
【问题讨论】:
-
我猜是
new GLchar[infolen + 1];崩溃了?infolen崩溃时的值是多少? -
如果某些函数调用可能触发错误,例如 OpenGL 函数调用,检查错误是一个很好的做法。如果你忽略它们,你就会观察到奇怪的行为。
-
@DanielLangr 你能详细说明一下吗?
-
@dvrer 见khronos.org/opengl/wiki/OpenGL_Error。此外,每个 OpenGL 函数的文档都列出了函数调用可能导致的特定错误。
标签: c++ memory-management opengl-es android-ndk new-operator