2017-02-16 76 views
0

我在大会程序存在的和发生在我身上出现以下错误:访问冲突写入位置在大会

异常在Application1.exe在0x00B71792抛出:0000005:访问冲突写入位置0x00B76BED。

Application1.exe中0x00B71792未处理的异常:0xC0000005:访问冲突写入位置0x00B76BED。

我正在使用Visual Studio进行编程。这里如下我的代码:

char *strCat(char *dest, char *src) { 
    __asm { 
     xor eax, eax 
     mov ecx, 0xffffffff 
     mov esi, src 
     mov edi, dest 
     mov al, 0 
     cld 
     repne scasb 
     dec edi 
    L0 : 
     lodsb 
     stosb 
     test al, al 
     jne L0 
     mov eax, edi 
    }; 
} 

stosb指令错误ocurr根据调试。

在我看来,代码是正确的。找不到该错误。

+3

你有没有通过视觉工作室的C中内嵌汇编加强++调试器来观看怎么了? –

+1

值0xffffffff看起来可疑。它是为了什么? –

+4

我们需要知道您用来调用该函数的参数。你不能随心所欲地串联角色。例如,strCat(“abc”,“123”)将可能崩溃。 – PaulMcKenzie

回答

2

崩溃的问题在于您试图将字符连接到字符串文字上。这在C++(和C)中是未定义的行为。

要调用你的函数安全,你必须

1)确保您的目标缓冲区足够大,以容纳连接字符串,并

2)目标缓冲区是可写的存储器中,而不是字符串-文字。

为了使内存可写,一个方法是简单地声明一个字符数组,它是大到足以容纳整个连接字符串:

char destination[100] = "abc"; 
strCat(destination, "123"); 
+0

谢谢你!它为我工作。该功能按设计工作 –