我越来越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;
}
请帮我。
我越来越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;
}
请帮我。
你不能这样做,因为你试图使用的内存位置不属于你的进程。您的程序实际上没有适当的权限来执行此操作。
尝试手动猜测和定义内存地址不是一个好习惯,因为使用此类地址基本上会导致未定义的行为情况。
实际上,0xABCDEF
您尝试使用的地址看起来像是从某种教程中获取的示例。可能,您会将其替换为特定于您的系统和操作系统配置的实际地址?
您无权将不属于您的进程的位置填充为零。
如果要在特定位置填充零,则必须首先分配该内存...您必须删除行“#define ptr ...”并在注释代码中执行类似操作:
#include <stdio.h>
#include <stdlib.h>
int main(){
int* ptr = (int*) malloc(sizeof(int));
*ptr = 0;
return 0;
}
操作系统只会为您的程序分配一定数量的内存。您可以使用 malloc() 请求额外的内存,然后您将从堆中获得一块连续的内存,此分配再次由操作系统完成。
记住这几点,
您的程序无法指定您希望分配内存的内存地址。
您的程序无法访问任何随机内存地址,因为它将被虚拟内存管理器监控,任何违规都会引发硬件异常。
将您的内存分配到一个特定的地址肯定是没有逻辑的。