0x00c71443 0xC0000005处的未处理异常:访问冲突写入位置0x00000028

时间:2014-07-12 20:46:59

标签: c

我正在编写C代码来模拟从uart传输角色。我收到了标题错误。

代码:

#include<stdio.h>
void transmit(char uart, char data[]){
   writeReg(uart,data);
      ......
       ......
}

void writeReg(char addr, char data[]){
  char* dataPtr = data;
  char* regPtr = (char*)addr;
  *regPtr = *dataPtr;  ........ This is where the error was thrown <bad ptr>
}

void main(){
   transmit(0x28,"1245");
}

3 个答案:

答案 0 :(得分:5)

您的代码尝试写入0x00000028位置的内存。此地址位于地址空间的受保护区域中,您不能在那里写入(或读取)。因此违反了访问权限。

你的问题从这里开始:

char* regPtr = (char*)addr;

addr是一个字符,在您的程序中它的值为0x28。然后,您将其视为一个地址,不可避免的后果是访问冲突。

编译器拒绝的原因

char* regPtr = addr;

addr不是char*。简单的铸造并没有改变这一事实。当您遇到一个您不理解的编译错误时,请不要试图超越它。第1步总是要理解错误。

你的代码没有任何意义。我不知道它试图做什么,所以我不能告诉你代码应该是什么。

答案 1 :(得分:2)

您正在为指针投射字符值,这会给您一个无效的指针。

也许你想这样做呢?

char *regPtr = &addr;

答案 2 :(得分:1)

您正在尝试使用 分配给您的计划的memory location

您的程序必须将内存中的值更改为仅分配给它的地址空间。

地址空间的分配是动态完成的,您应始终使用相对内存位置,而不是绝对位置,就像您的情况一样。因为相对内存位置会根据分配给程序的地址空间而移位,但绝对位置

  

可能会或可能不会落下

在其中,可能像{I}一样产生exceptions