簡體   English   中英

是否有可能同時運行相同的未更改的代碼,有時不會?

[英]is it possible for the same unchanged code to sometimes run and sometimes not?

我最近一直在學習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]));

然后我注釋掉了我添加的所有代碼,以便代碼和以前一樣,我仍然會拋出異常。

我認為這條線與我剛添加的代碼無關是可以理解的,添加的代碼會導致這個問題毫無意義。 這實際上是這行代碼第二次在更改代碼后拋出異常。 最后一次通過不對代碼進行任何更改來修復它,最終它運行了我希望會再次發生,但我想知道這種隨機行為的原因是什么?

是否有可能同時運行相同的未更改的代碼,有時不會?

是。 如果那是你觀察到的,那么你應該已經意識到這是可能的。

例如,如果程序具有未定義的行為。 當beahaviour未定義時,無論是否有任何不相關的東西,“任何事情”都是可能的。

另一個例子是並發程序,它們的行為可能會有所不同,具體取決於任務調度程序如何分配時間。

最后,運行時輸入的差異顯然可以改變“未更改”代碼的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM