2012-05-20 124 views
0

好吧,我無法弄清楚這一點。調試器沒有提供有關此特定異常的更多信息。訪問衝突:錯誤的指針

這裏被調用的函數:

NC_LIBEXPORT(VOID) ncKeyExpand(unsigned char* key, int initlen) 
{ 
    int abspos = initlen; 
    int curkpos = 0; 
    do 
    { 
     key[abspos] = key[curkpos]; 
     ++abspos; 
     ++curkpos; 
     if(curkpos >= initlen) 
      curkpos = 0; 

    } while (curkpos < NC_KEY_MAX_LENGTH); 
} 

和接入違規行爲,會在第二行的位置:

unsigned char apkey[NC_KEY_MAX_LENGTH]; 
ncKeyExpand(&apkey[0], NC_PRIV_KEY_LENGTH); 

任何瞭解爲什麼這是怎麼回事?我沒有做的是修復它。 0000005:在測試Application.exe在0x776e7094

未處理的異常

這是確切的錯誤。

訪問衝突。

當一個指針指向一個不可訪問的地址時(如它已被釋放或超出範圍或空等),是不是訪問衝突?如果是這樣,爲什麼在這裏提出?字符數組是就在那裏

+0

什麼是NC_KEY_MAX_LENGTH和NC_PRIV_KEY_LENGTH的價值? –

回答

1

您的數組聲明的長度爲NC_KEY_MAX_LENGTH這意味着您可以從apkey[0] thr'apkey[NC_KEY_MAX_LENGTH-1]訪問它的位置。如果你看一下你的函數

do 
{ 
    key[abspos] = key[curkpos]; 
    ++abspos; 

您正在訪問超出你的數組大小

..

+0

+1。你可以通過使用'while'循環而不是'do'-'while'循環來修復它。 –

+0

很酷,修復它。另外,我給它一個'unsigned char *'字符串,顯然它不喜歡...... – Qix