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()의 분할 오류
여기에 무슨 일이 일어날 수 있습니까?
몇 가지 땜질 후 나는 그것을에서
std::string
을하고
c_str()
에 의해 반환 된 포인터에 대한 포인터
glShaderSource()
를 전달하여 힙, 즉에
buffer
의 복사본을 만들 경우, 그것이 작동하는 것을 발견했습니다.
이제는 더 혼란 스럽습니다. 나는 단순히 buffer
에 char *
포인팅을 선언하고 그에 통과하는 경우에도이 위에
, 그것은 작동합니다. 포인터에 대한 포인터 대 포인터에 대한 포인터를 선언 할 때 C++ 11은 특별한 것을합니까?
이것은 내가 끝내었지만, 자세한 설명에 큰 감사드립니다! – jmegaffin