-4

我越来越Access violation writing location at 0xABCDEF。我尝试了很多方法来解决这个问题。但最后没能做到。

#define xyz 0xABCDEF
#define ptr (UINT16 *) (xyz)

int main()
{

    //int *ptr;
    //ptr = (int*)malloc(sizeof(int));
    *ptr = 0;
    return 0;
}

请帮我。

4

3 回答 3

4

你不能这样做,因为你试图使用的内存位置不属于你的进程。您的程序实际上没有适当的权限来执行此操作。

尝试手动猜测和定义内存地址不是一个好习惯,因为使用此类地址基本上会导致未定义的行为情况。

实际上,0xABCDEF您尝试使用的地址看起来像是从某种教程中获取的示例。可能,您会将其替换为特定于您的系统和操作系统配置的实际地址?

于 2013-02-28T14:35:19.057 回答
1

您无权将不属于您的进程的位置填充为零。

如果要在特定位置填充零,则必须首先分配该内存...您必须删除行“#define ptr ...”并在注释代码中执行类似操作:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int* ptr = (int*) malloc(sizeof(int));
    *ptr = 0;
    return 0;
}
于 2013-02-28T14:42:58.477 回答
1

操作系统只会为您的程序分配一定数量的内存。您可以使用 malloc() 请求额外的内存,然后您将从堆中获得一块连续的内存,此分配再次由操作系统完成。

记住这几点,

您的程序无法指定您希望分配内存的内存地址。

您的程序无法访问任何随机内存地址,因为它将被虚拟内存管理器监控,任何违规都会引发硬件异常。

将您的内存分配到一个特定的地址肯定是没有逻辑的。

于 2013-02-28T15:05:26.740 回答