任何人都可以给我一个示例代码使用malloc分配内存? IDE:mplab x ide 编译器:XC16编译器 MCU:PIC24F如何在mplab x ide,XC16编译器中使用malloc分配内存?
在此先感谢。
任何人都可以给我一个示例代码使用malloc分配内存? IDE:mplab x ide 编译器:XC16编译器 MCU:PIC24F如何在mplab x ide,XC16编译器中使用malloc分配内存?
在此先感谢。
使用malloc
等等与任何C
实现中的相同。但是,默认情况下,XC16中的链接器不会分配一个堆(从中获取malloc的内存)。你需要告诉链接器分配一个堆在Project Properties|xc16-lc|General|Heap size
。堆的大小必须大于您正在创建的最大内存分配以及一些开销(有关详细信息,请参阅XC16文档)。
请记住,很多malloc/ralloc
活动可能会碎片堆,而你的堆不是很大。所以,请注意这一点。一个好的策略是像LIFO缓冲区那样使用堆(即总是以相反的顺序释放内存以分配它)。
任何人都可以给我一个使用malloc分配内存的示例代码吗?
/*
* XC16 v1.31
* PIC24FJ128GB606
* MPLAB X IDE v3.65
* Simulator Debugger
*/
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
volatile int i=0;
int main()
{
volatile int *ptr= malloc(100*sizeof(int));
if (ptr == NULL)
printf ("Cannot allocate memory\n");
else
{
printf ("Memory Allocated successfully \n");
for (i=0; i<(100*sizeof(int)); i++)
{
*ptr=i;
printf ("Pointer value=%d \t i=%d\n",*ptr++,i);
}
}
free ((void *)ptr);
return 0;
}
另外参阅XC16编译目录,文件, “16 Bit_Language_Tools_Libraries_Manual.pdf” 下截面 “标准C库”。
看起来像[XY问题](http://xyproblem.info/)。问一个关于你所遇到的问题的问题,而不是关于你认为的解决方案。作为使用'malloc()'的标准库函数,在任何支持它的平台上都是相同的。 XC16用户手册的第10.3节针对malloc,calloc和ralloc声明:*“如果您不使用这些函数中的任何一个,则 则不需要分配堆。默认情况下,不会创建堆。 *。所以如果你遇到了问题,那就是你应该问的问题。 – Clifford