char buffer[1024];
memset(buffer, 0, sizeof(buffer));
FILE *vertexShaderFile = fopen(vertexShaderPath.c_str(), "rb");
fread(buffer, 1, sizeof(buffer) - 1, vertexShaderFile);
fclose(vertexShaderFile);
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, (const char **)&buffer, nullptr);
glCompileShader(vertexShader);
上的分段錯誤使用此代碼,我在撥打glShaderSource()
時遇到了分段錯誤。使用GDB,我已經確認buffer
(着色器代碼)的內容正確地以null結尾。最重要的是,我已經檢查過GLEW_ARB_shader_objects
和glShaderSource
已經加載。glShaderSource()
這裏可能會發生什麼?
一些修修補補之後我發現,如果我做的buffer
副本上堆,即由它作出std::string
並通過glShaderSource()
一個指向其c_str()
返回的指針,它的工作原理。
現在我更加困惑。
在此之上,即使我只是宣佈char *
指向buffer
,並把它傳遞,它的工作原理。當你聲明一個指向數組的指針與指向指針的指針時,C++ 11會做一些特殊的事情嗎?
這就是我最終做的,但非常感謝您的詳細解釋! – jmegaffin 2014-11-23 14:59:50