地址赋值指针加强制转换问题

西瓜太溜 2017-06-11 06:19:08
各位,请问一下,我现在想要把地址0x6800e008赋值给指针数组,我是这样操作的。
char *tables[8];//此数组类型改不了
unsigned int *p;
*p=0x6800e008;
table[0]=(char *)p;
编译器编译时不出错,可stm32板子执行时,执行到这就卡死了。我以为是强制转换出错了,请问大家有没有解决的办法。
其实我想做的就是tables[0]=(char *)malloc();找到其地址,然后自己把地址赋给tables数组。实现了malloc申请的地址都是相同。
...全文
515 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-06-23
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
xiaohuh421 2017-06-23
  • 打赏
  • 举报
回复
因为野指针了, 出错是正常的吧. char *tables[8];//此数组类型改不了 unsigned int *p = (unsigned int *)0x6800e008; table[0]=(char *)p; 你想要的是不是这个效果.
 室女座总嘟 2017-06-23
  • 打赏
  • 举报
回复
char *tables[8];//此数组类型改不了 unsigned int *p; *p=0x6800e008; //p指向哪里? “0x6800e008”原本并不占有储存空间。 table[0]=(char *)p;
xskxzr 2017-06-22
  • 打赏
  • 举报
回复
不能直接给指针赋值,p=0x6800e008 理论上也应该报错。
西瓜太溜 2017-06-22
  • 打赏
  • 举报
回复
嗯那,犯了这么基础的错误,已改正,谢谢大家。
自信男孩 2017-06-12
  • 打赏
  • 举报
回复
引用 3 楼 wang0635 的回复:
p=0x6800e008; 不是 *p=0x6800e008;
++ *p=0x6800e008是对指针指向的内存空间(4个字节)赋值。 若是p = 0x6800e008,但是不能确定这个地址是否可以使用呢,建议使用malloc申请
西瓜太溜 2017-06-11
  • 打赏
  • 举报
回复
引用 3楼wang0635 的回复:
p=0x6800e008; 不是 *p=0x6800e008;
对的,我在题目中打错了。马上修改。
wang0635 2017-06-11
  • 打赏
  • 举报
回复
p=0x6800e008; 不是 *p=0x6800e008;
西瓜太溜 2017-06-11
  • 打赏
  • 举报
回复
移植魔方还原算法,它是先手动申请内存,然后遍历,将近20000条指令,为了节省时间,所以现在第一次申请完表格后就直接复制地址。
beishen7234 2017-06-11
  • 打赏
  • 举报
回复
还有这种操作。。。不能直接手动分配地址,我记得

70,019

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧