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.

[参考译文] CC3230SF:导致内存堆崩溃的免费函数

Guru**** 2478765 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1433661/cc3230sf-free-function-causing-memory-heap-crash

器件型号:CC3230SF

工具与软件:

使用 SDK-7时,应用程序将 heapMem 与 gateMutex:

如果 heapsize 配置为: HEAPSIZE = 0x10000;且剩余大量空间,则函数无法释放内存。 由于同一函数分配(Memory_alloc)内存并在函数调用期间将其释放三次、因此每次空闲调用都不会发生这种情况。

调试到函数 free (ptr);中、我发现以下函数中的 size 参数损坏(536892040)、并调用: HeapMem_freeUnprotected。

/*
*==== MEMORY_FREE ===
*/
void Memory_free (Heap_Handle 堆、void *块、size_t 大小)

if (heap == NULL){
heap = Memory_defaultHeapInstance;
}

heap->free (heap、block、size);
}

崩溃前:

问题:发生这种情况是因为应用程序正在调用  Memory_alloc 并使用 free ()来释放?  之前、我使用的是 malloc、这导致了崩溃。

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

    所以,如果你使用 malloc()和 free(),它会崩溃吗?

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

    由于 malloc 函数崩溃、因此我将其改为 Memory_alloc。 它可以正常工作、但现在它完全免费崩溃了。 另外、我发现如果我不在 GateMutex 中设置标志、我的应用程序将所有线程块;  

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

    我发现了问题。 虽然在 syscfg 文件中显示为已选择的 HeapMem 模块、但是这个模块并未被添加为一个模块。 我必须重新选择 GateMutex、这将强制在 syscfg 文件中进行更改以添加 HeapMem 模块。  

    我不知道为什么以前没有添加它,我不明白为什么 malloc 的随机行为在其他一些领域起作用和崩溃。  

    您可以在上面的图片中看到标记是在 syscfg 文件中设置的、但它没有添加到文件中、这是怎么可能的?