私はglfwを使ってOpenGLで図面を作ろうとしていますが、私が直面している問題は、ポイントのさまざまな座標を保存することです(私はその値を知ることができないか、それらを保存するためのスペースを増やすためにポインタを再割り当てします。
私はボタンを押したときにのみポインタを再割り当てする必要があります。したがって、key_callback
関数内にreallocがあると意味が分かりました。
問題は明らかに、int *pointer
はので、私は直接そこにreallocをすることはできませんし、それが特定の引数がありGLFWのfucntionですので、私はkey_callback
へint *
を渡すことはできませんkey_callback
の範囲ではない、ということである私ができます」 t変化。
私の質問はkey_callback
内のグローバル変数を増加させ、それがmain
とkey_callback
の両方から見えるだように、私は(世界的に)メインのint *pointer = malloc
外を宣言すべきであり、そしてメインの内側にif (new_variable_value != old_variable_value){realloc}
ような何かを行うか、私はしなかった第3の選択肢が存在しますのことを考える?glfw - key_callback内のreallocが可能ですか?
これは私が今持っているコードの骨組みである:(明らかにそれはそれはあなたに私が何をしたいのかのアイデアを与えるためにだけですが、多くの理由のために動作しません)
key_callback(GLFWwindow *window, int key, int scancode, int action, int mods) {
// do stuff
// realloc pointer
}
int main(void) {
int *pointer = malloc(sizeof(int));
if (!pointer){
free(pointer);
exit(EXIT_FAILURE);
}
GLFWwindow *window;
glfwSetErrorCallback(error_callback);
if (!glfwInit())
exit(EXIT_FAILURE);
window = glfwCreateWindow(1280, 720, "Example", NULL, NULL);
if (!window) {
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
glfwSetKeyCallback(window, key_callback);
while (!glfwWindowShouldClose(window)) {
//draw stuff
glfwSwapBuffers(window);
glfwPollEvents();
}
free(pointer);
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
ありがとう、私はその関数の存在を無視しました –