动态内存分配问题

⚠️
您好,谢谢您来到论坛。令人兴奋的消息!我们正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量-请在//www.xmece.com/support.我们将在未来几天内修复bug/优化搜索和标记。
5个员额/0个新员额
最后一篇文章
uched41
离线
最后一次见到:2年11个月前
加入:2018-08-17 23:02
动态内存分配问题

您好,我在使用该芯片分配相对较大的阵列时遇到了一个小问题,我使用的是SDK 5.0.4,我有一个2结构,

typedef结构{uint8_t x,uint8_t y;}s1;
类型定义结构{
uint8_t c;
s1*buf;//指向第一个结构的数组的指针
}s2;

然后我为第二个结构s2动态分配内存,

s2*mys2=malloc(sizeof(s2));

然后在结构s2的初始值设定项中,我为结构s1分配内存

s2->buf=malloc(sizeof(s1)*长度);

如果内部数组的长度相对较小(70),则一切正常,但如果我将大小增加到该长度以上,程序将崩溃,看起来像是内存错误。我看过文档,DA15580有足够的RAM和ROM(82KB ROM,42KB SRAM)。

我的代码基于SDK中的模板,内存分配在我的初始化函数中调用,该函数传递给.app_on_init。我想知道BLE堆栈对动态内存分配是否有任何限制,或者这可能是我的程序组织中的问题。感谢您的帮助。

设备:
PM_对话框
离线
最后一次见到:1周5天前
工作人员
加入:2018-02-08 11:03
嗨,41,

嗨,41,

我复制了您的问题,您的代码崩溃的原因是,当长度超过70时,结构的初始化需要太长时间,因此WDOG过期。请尝试在另一个函数中添加初始化代码。例如,我添加了长度为100的结构的初始化,但代码未获得cr你可以在附件中找到我使用的代码片段。

谢谢,下午好

附件:
uched41
离线
最后一次见到:2年11个月前
加入:2018-08-17 23:02
好的,非常感谢我会努力的

好的,非常感谢。我会试试这个。禁用看门狗或者至少增加触发时间是明智的吗?

uched41
离线
最后一次见到:2年11个月前
加入:2018-08-17 23:02
它最后成了一堆

这最终是一个堆问题,默认情况下,堆大小设置为0x100,即使对于一般应用程序,这也非常小。任何在动态内存分配方面存在此类问题的人都应该尝试在boot_vector.s文件中增加堆大小。亚博国际官网平台网址

PM_对话框
离线
最后一次见到:1周5天前
工作人员
加入:2018-02-08 11:03
嗨,41,

嗨,41,

很高兴你解决了你的问题。谢谢你的提示。

谢谢,下午好