TI中文支持网
TI专业的中文技术问题搜集分享网站

malloc失败问题

各位专家大牛:

我使用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:

好的,我再查一下,非常感谢!!

赞(0)
未经允许不得转载:TI中文支持网 » malloc失败问题
分享到: 更多 (0)