2012-05-20 128 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