工具/软件:TI C/C++编译器
你(们)好
在本论坛上首次发布。 希望我把这个放在正确的地方,但说实话,我不能完全确定问题的根源。
大多数产品都是保密协议(NDA)的,因此请原谅我在这里发布的内容受到限制。 我想先看看有没有人有什么建议,然后再去写代码,让互联网更合适。
IM在我的编译器保存变量的位置存在问题。
我尝试用指针作为参数,它指向一个存储32位整数的位置,表示一些感兴趣的数据。
该函数的目的是格式化数据,只需构建一个本地数组,中间有“相关数据”,开头有一个地址,结尾有一个CRC,然后返回一个指向新的完整数组位置的指针 (应位于传递到函数的指针的不同位置)。 准备发送到另一台设备。
问题是当我在参数写入内存时进入函数时,我可以在内存浏览器中清楚地看到,指针引用的最后几个字节的数据在参数中被覆盖。
要表示这一点:
进入功能前:
地址:0x0万 (实际上它存储在堆栈中的某个位置,我相信):1 2 3 4 5 6 7 8 9....*dataofinterest *....... 32岁
然后输入函数,调试器通过左括号时:
地址:0x0万:1 2 3 4 5 6 7 8..... 26 27 28 29 30 *后位值* 48
现在*potintervalue实际上是指针参数本身的值,而48和3是传递给函数的另外两个参数。
有趣的是,这三个参数的记忆位置似乎保持不变。 但是,由于感兴趣的数据最多为32个整数,因此感兴趣的数据并不总是与参数的地址保持距离,例如,如果我传递函数的指针指向一个后面有29条数据的位置。 当参数在输入函数时初始化时,数据不会被改写。
如果有任何提示,我们将不胜感激。 如有任何问题,请立即解决。 我真的不能在这里发布任何代码,但我认为我需要更深入地了解编译器分配地址的方式,我需要一种基本的方式来说“不要在这32个位置中放置任何东西,此指针后面的信息是X长度”
非常感谢
Sean