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