我正在编写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");
}
答案 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
。