计算指针时访问冲突

时间:2017-01-08 16:25:40

标签: c++ windows memory

我非常担心这个问题非常非常简单,但即使你开始掌握指针的想法,有经验的用户的提示也会缩短我需要花费的时间来理解一切。我有一个简单的例子,我不会详细介绍它应该在以后做什么,因为我认为我的错误是非常基本的。我得到了:

抛出异常:读取访问冲突。 _First是0x815110。

执行此代码时:

np.float64

开放过程方法和其他基本内容都在标题中,它们确实工作正常,我不知道的是为什么当我将字节指针BYTE * dwMaphack更改为DWORD * dwMaphack时,有' s不再是访问冲突错误?

我试图将我的代码建立在一些过时的代码上,这些代码已经不再适用了,所以这些操作的原因只有我知道,我知道它应该做什么编程术语,但我还不知道游戏中的效果。我无论如何都认为它在我遇到的错误方面很重要。提前感谢您的答案!

2 个答案:

答案 0 :(得分:3)

BYTEunsigned 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