【发布时间】:2017-03-24 23:29:33
【问题描述】:
我正在尝试使用 glfw 在 openGL 中进行绘图,我面临的问题是要保存点的各种坐标(我无法知道它们的值或提前有多少)我需要重新分配指针以获得更多空间来保存它们。
我只需要在按下按钮时重新分配指针,因此我认为重新分配位于 key_callback 函数中是有意义的。
问题是,很明显,int *pointer 不在key_callback 的范围内,所以我不能直接在那里重新分配它,我不能将int * 传递给key_callback,因为它是一个glfw 函数我无法改变的具体论点。
我的问题是,我是否应该在 main (全局)之外声明 int *pointer = malloc 以便从 main 和 key_callback 都可以看到它,在 key_callback 内增加一个全局变量并在 main 内执行类似 if (new_variable_value != old_variable_value){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);
}
【问题讨论】: