This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/MSP432P401R:指针内存分配/内存地址冲突。

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/622901/compiler-msp432p401r-pointer-memory-allocation-memory-address-clashes

部件号:MSP432P401R

工具/软件: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    解决了这个问题,只是把所有的问题写下来就能更好地理解它。简单地说,把指针返回到局部变量的问题就是问题。 因此,当在进入函数时使用堆栈内存时,旧值在可以使用之前被重写。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的跟进。  -George