質問: sstream.str().c_str(); glShaderSource(out_shader, 1, &cc, nullptr); glCompileShader(out_shader); // printf("ファイル読み込み成功: %s\n", fileName); GetShader_Log(fileName,out_shader, GL_COMPILE_STATUS); glAttachShader(mShaderProgram, out_shader); shaderfile.close(); } else { shaderfile.close(); glDeleteShader(out_shader); //printf("ファイル: %s が存在しません。\n", fileName); return false; } glDeleteShader(out_shader); return true; } ```
回答: この記事が該当していそうです。 Don't let std::stringstream.str().c_str() happen to you の Did you see the problem? の部分。 つまり`const char* cc = sstream.str().c_str();`のように書くと、`;`の時点で`sstream.str()`で取得した`std::string`のスコープが外れるので、それから`.c_str()`で取得したポインタも無効になると書いてあるようです。 解決策の方は貴方がコメントアウトした部分のように書かれています。