Возможно ли запускать один и тот же неизмененный код, а иногда нет? - PullRequest
1 голос
/ 23 марта 2019

Я недавно изучал OpenGL и, пока я его использовал, я столкнулся с ситуацией, когда мой код не запускается, и я попробовал некоторые вещи, которые не работали, затем однажды, без внесения каких-либо изменений, код только что запустился.

Сначала я подумал, что я, должно быть, случайно что-то изменил или забыл об изменениях, которые я сделал, хотя я был почти уверен, что не сделал этого, но это случалось со мной 3 или 4 раза, теперь самое последнее существо моя текущая ситуация.

У меня есть длинная программа OpenGL, которая представляет собой шутер от первого лица, и я хотел добавить функцию, которая позволяет пользователю изменять чувствительность, удерживая клавишу «вверх» или «вниз» во время игры. Поэтому я добавил этот код в основной файл:

void change_sensitivity(GLFWwindow* window);
float sensitivity = 0.3f; //make sensitivity a global variable

... //all the main code//

void mouse_callback(GLFWwindow* window, double xpos, double ypos)   
{
...
// I remove this line:
// float sensitivity = 0.3f;
// as it is now global
...
}

void change_sensitivity(GLFWwindow* window)
{
    if (glfwGetKey(window, GLFW_KEY_UP) == GLFW_PRESS)
        sensitivity += 0.01;
    else if (glfwGetKey(window, GLFW_KEY_DOWN) == GLFW_PRESS)
        sensitivity -= 0.01;
}

После добавления этого к коду, который ранее работал правильно, я получаю исключение, выданное этой строкой:

GLCall(glUniformMatrix4fv(glGetUniformLocation(a_shader_ID, model.c_str()), 1, GL_FALSE, &a_model_matrix[0][0]));

Затем я закомментировал весь код, который я добавил, чтобы код был таким же, как прежде, и я все еще получаю исключение.

Я думаю, что понятно, что эта строка не имеет ничего общего с кодом, который я только что добавил, и нет никакого смысла в том, что добавленный код вызвал бы эту проблему. Фактически это второй раз, когда эта строка кода выдает исключение после изменения кода. В прошлый раз исправили это, не внося никаких изменений в код, и в конце концов он запустился, что, я надеюсь, повторится снова, но я хотел бы знать, что может быть причиной этого очень случайного поведения?

1 Ответ

3 голосов
/ 23 марта 2019

Возможно ли, чтобы один и тот же неизмененный код иногда запускался, а иногда нет?

Да. Если это то, что вы наблюдали, то вы должны уже знать, что это возможно.

Например, если программа имеет неопределенное поведение. Когда поведение не определено, «любая вещь» возможна по любой причине, независимо от того, изменилось ли что-то не связанное.

Другим примером являются параллельные программы, которые могут вести себя по-разному в зависимости от того, как планировщик задач выделяет время.

Наконец, различия во вводе во время выполнения, очевидно, могут изменить поведение «неизмененного» кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...