各位专家大牛:
我使用C6678的芯片,用CCS裸机工程调用malloc函数分配内存,然后再用free函数释放内存,最终在重复malloc几次之后就会返回指针为空了,malloc的次数与.cmd文件中–heap分配的大小有关;
请教一下,malloc一定次数之后返回指针为空可能是跟什么有关?是free函数没有生效吗?
Shine:
请问您的代码是怎么写的?每次malloc后都有free吗?
,
Nancy Wang:
请将相关代码贴出来看一下。如果增加heap大小会有改善吗?
,
HaiShan Lin:
这是测试代码:
int test(){for(xn = 32; xn <= MAX_POINTS; xn <<= 1){vsip_vadd_test(xn);}
}
int vsip_vadd_test(vsip_length n){vsip_vview_f *dataA= malloc(n*4);vsip_vview_f *dataB= malloc(n*4);vsip_vview_f *dataO= malloc(n*4);vsip_vview_f *dataO1 = malloc(n*4);/*参数检测*/if(NULL == dataA || NULL == dataB || NULL == dataO || NULL == dataO1 ){printf("Memory pointer is NULL!!!\n");return -1;}free(dataA);free(dataB);free(dataO);free(dataO1);return 0;
}cmd文件增大heap大小,会有改善,比如原先循环测试4次malloc之后就是空指针,增大heap大小后,可能循环6次之后才是空指针。
,
Nancy Wang:
你循环malloc的几次是分配的一段连续的空间,这段空间被分配结束了肯定再次malloc肯定会失败的。
你可以打开memory browser,往这些空间里填充数,调试看一下。
,
HaiShan Lin:
没明白什么意思,我预留的heap空间是分配完了?但是我free了啊,再malloc还会失败?是free这个没有起到释放内存的作用吗?
往哪个地址填数?我一开始的测试流程是复杂的,每次malloc之后都会填充数据,后来出问题之后是定位到malloc失败,所以写了上面的测试程序专门测试malloc,发现确实会有malloc失败的情形。
多次malloc这个应用是必需的,我应该怎么实现多个变量都用malloc?
,
Nancy Wang:
可能前面有一些误解,理解了。
我大概测试了一下您的书写流程没测出有问题。建议看一下每次给datax分配的地址是不是有问题,结合map文件.sysmem段的地址范围看一下。
,
HaiShan Lin:
好的,我再查一下,非常感谢!!
TI中文支持网


![AM6442: [IPC RPMSG] Message send to remote core 5 @ 16 end point truncated due to lack of space in vring buffer !!!-TI中文支持网](https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_DSP_pastedimage1753265713483v1.jpg)