CPP_TEST.exe中0x00af7230处的未处理异常:0xC0000005:访问冲突写入位置0x00abcdef

时间:2013-02-28 14:33:25

标签: c++ c linux-kernel operating-system interrupt

我得到了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;
}

请帮帮我。

3 个答案:

答案 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()请求额外的内存,然后你将从堆中获得一个连续的内存块,这个分配也是由操作系统完成的。

请记住这些要点,

  

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

     

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

     

当然,没有任何逻辑可以将你的记忆分配到一个特定的地址。