我非常担心这个问题非常非常简单,但即使你开始掌握指针的想法,有经验的用户的提示也会缩短我需要花费的时间来理解一切。我有一个简单的例子,我不会详细介绍它应该在以后做什么,因为我认为我的错误是非常基本的。我得到了:
抛出异常:读取访问冲突。 _First是0x815110。
执行此代码时:
np.float64
开放过程方法和其他基本内容都在标题中,它们确实工作正常,我不知道的是为什么当我将字节指针BYTE * dwMaphack更改为DWORD * dwMaphack时,有' s不再是访问冲突错误?
我试图将我的代码建立在一些过时的代码上,这些代码已经不再适用了,所以这些操作的原因只有我知道,我知道它应该做什么编程术语,但我还不知道游戏中的效果。我无论如何都认为它在我遇到的错误方面很重要。提前感谢您的答案!
答案 0 :(得分:3)
BYTE
是unsigned char
的别名。
std::cout
有一个重载的operator<<
,它接受unsigned char*
指针作为输入并将其打印为字符串(如Harry Johnston所述,https://stackoverflow.com/a/41538200/7376565)。因此,当它试图访问它无法访问的内存时崩溃。
std::cout
operator<<
(DWORD*
}没有unsigned long*
重载,但void*
确实有一个重载,所以任何非字符指针只会打印指针本身的值。当您将dwMaphack
更改为DWORD*
时,operator<<
不会尝试访问dwMaphack
指向的内存,因此不会发生访问冲突。
答案 1 :(得分:0)
这是你的问题:
local_time<microseconds>
这是试图打印cout << dwMaphack << endl;
指向的值,而不是指针的值。由于指针仅在远程进程中有效,因此尝试取消引用它会导致访问冲突。
这有效:
dwMaphack