1

谁能给我一个使用malloc分配内存的示例代码?IDE:mplab x ide 编译器:XC16 编译器 MCU:PIC24F

提前致谢。

4

2 回答 2

1

谁能给我一个使用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 编译器目录下的“标准 C 库”部分,文档,“16-Bit_Language_Tools_Libraries_Manual.pdf”。

于 2017-06-29T11:33:03.583 回答
1

使用etc. 与任何实现malloc中的相同。C然而,默认情况下,XC16 中的链接器不会分配堆(从中获取 malloc 的内存)。您需要告诉链接器在Project Properties|xc16-lc|General|Heap size. 堆的大小必须大于您正在分配的最大内存,加上一些开销(有关详细信息,请参阅 XC16 文档)。

请记住,大量malloc/ralloc活动可能会使堆碎片化,而您的堆并不大。所以,请注意这一点。一个好的策略是像使用 LIFO 缓冲区一样使用堆(即总是以与分配相反的顺序释放内存)。

于 2017-02-12T17:55:49.573 回答