2017-02-16 24 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

謝謝你!它爲我工作。該功能按設計工作 –