2016-12-17 126 views
-3

我想獲得一些幫助,同時運行的應用程序訪問衝突讀取位置0xFDFDFDFD

異常在ConsoleApplication1.exe中在0x0029B23D扔我得到這個錯誤。如果此例外有處理程序 ,程序可能會安全地繼續。

我認爲這個問題是訪問非分頁內存區域

這裏是我的代碼

int ** create_tab(int size) 
{ 
    int ** tab = new int *[size]; 
    for (int i = 0; i < size; i++) 
    { 
     tab[i] = new int[size]; 
    } 
    return tab; 
} 
int definition(int direction, int px, int py, int tab) 
{ 
    switch (tab[&py][&px]) { 
    case 1: 
     tab[&py][&px] = 0; 
     direction = direction - 1; 
     break; 
    case 0: 
     tab[&py][&px] = 1; 
     direction = direction + 1; 
     break; 
    } 
    return direction; 
} 
int main() 
{ 
    int px = 0; 
    int py = 0; 
    int direction = 0; 
    int size = 0; 
    int steps = 0; 
    int steps_done = 0; 
    for (int steps_done = 0;steps_done < steps;steps_done++) 
    { 
     system("cls"); 
     turningaround(direction); 
     moves(direction, px, py); 
     looping_tab(px, py, size); 
     definition(direction, px, py, ** tab); 
     printing(size, ** tab); 
} 

的問題來自定義功能,該程序將啓動,但是當我嘗試只是繼續它一次又一次地出現。

+5

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+1

爲什麼你打開'tab [&py] [&px]'而不是'tab [py] [px]'? – doctorlove

+0

你發佈的代碼有幾個功能,你沒有告訴我們的定義。哪一行產生錯誤?它來自我們看不到的功能之一嗎? – doctorlove

回答

1

使用tab[&py][&px]恰好會使編譯器接受代碼,但它只是完全是錯誤。你不小心告訴編譯器&py是一個數組,tab是索引,當它應該是相反的。

,所述指引「作品」取決於這個怪癖的C語言:

With arrays, why is it the case that a[5] == 5[a]?

我想使用的功能預想方式是

int definition(int direction, int px, int py, int** tab) 
{ 
    switch (tab[py][px]) { 
    case 1: 
     tab[py][px] = 0; 
     direction = direction - 1; 
     break; 
    case 0: 
     tab[py][px] = 1; 
     direction = direction + 1; 
     break; 
    } 
    return direction; 
} 

但不因爲編譯器無法知道矩陣中行的長度。這取決於傳遞給create_tab函數的size參數,其中definition一無所知。

此外,如果該功能已經起作用,則必須收集main中返回的direction值。否則,更新將會丟失。

如果您打算使用C++,則可以使用tab a std::vector<std::vector<int>>來避免大多數這些問題。