gpt4 book ai didi

c++ - 程序集中发生访问冲突写入位置

转载 作者:行者123 更新时间:2023-11-28 01:52:53 32 4
gpt4 key购买 nike

我正在使用 Assembly 编程,但我遇到了以下错误:

Exception thrown at 0x00B71792 in Application1.exe: 0xC0000005: Access violation writing location 0x00B76BED.

Unhandled exception at 0x00B71792 in Application1.exe: 0xC0000005: Access violation writing location 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
};
}

根据debug,stosb指令出现错误。

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

最佳答案

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

要安全地调用您的函数,您必须

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

2) 目标缓冲区是可写内存,而不是字符串文字。

要使内存可写,一种方法是简单地声明一个足够大的 char 数组来容纳整个连接的字符串:

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

关于c++ - 程序集中发生访问冲突写入位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281806/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com