堆区内存分配和释放

malloc()

#include <stdlib.h>

void ****malloc***(****size_t\ size**);**

功能:在内存的动态存储区(堆区)中分配一块长度为size字节的连续区域,用来存放类型说明符指定的类型。分配的内存空间内容不确定,一般使用memset初始化。

参数:

​ size:需要分配内存大小(单位:字节)

返回值:

成功:分配空间的起始地址

失败:NULL

#include <stdlib.h> 
#include <stdio.h>
#include <string.h>

int main()
{
    int count, *array, n;
    printf("请输入要申请数组的个数:\n");
    scanf("%d", &n);

    array = (int *)malloc(n * sizeof (int));
    if (array == NULL)
    {
        printf("申请空间失败!\n");
        return -1;
    }
    //将申请到空间清0
    memset(array, 0, sizeof(int)*n);

    for (count = 0; count < n; count++) /*给数组赋值*/
        array[count] = count;

    for (count = 0; count < n; count++) /*打印数组元素*/
        printf("%2d", array[count]);

    free(array);

    return 0;
}
free()

#include <stdlib.h>

void *free***(**void ***ptr**);

功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,指向被释放区域的首地址。对同一内存空间多次释放会出错。

参数:

ptr:需要释放空间的首地址,被释放区应是由malloc函数所分配的区域。

返回值:无

内存操作函数

memset()

#include <string.h>

void *memset(void* s**, int c**, **size_t\ n**);**

功能:将s的内存区域的前n个字节以参数c填入

参数:

​ s:需要操作内存s的首地址

​ c:填充的字符,c虽然参数为int,但必须是unsigned char , 范围为0~255

​ n:指定需要设置的大小

返回值:s的首地址

    int a[10];

    memset(a, 0, sizeof(a));
    memset(a, 97, sizeof(a));
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%c\n", a[i]);
    }

memcpy()

#include <string.h>

void *memcpy(void* dest**, const void *src,* size_t* n**);

功能:拷贝src所指的内存内容的前n个字节到dest所值的内存地址上。

参数:

​ dest:目的内存首地址

​ src:源内存首地址,注意:dest和src所指的内存空间不可重叠

​ n:需要拷贝的字节数

返回值:dest的首地址

    int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int b[10];

    memcpy(b, a, sizeof(a));
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d, ", b[i]);
    }
    printf("\n");

    //memcpy(&a[3], a, 5 * sizeof(int)); //err, 内存重叠

memmove()

memmove()功能用法和memcpy()一样,区别在于:dest和src所指的内存空间重叠时,memmove()仍然能处理,不过执行效率比memcpy()低些。

memcmp()

#include <string.h>

int memcmp**(**const void *s1**, const void *s2**, size_t\ n**);**

功能:比较s1和s2所指向内存区域的前n个字节

参数:

​ s1:内存首地址1

​ s2:内存首地址2

​ n:需比较的前n个字节

返回值:

​ 相等:=0

​ 大于:>0

​ 小于:<0

    int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    int flag = memcmp(a, b, sizeof(a));
    printf("flag = %d\n", flag);
最后修改:2021 年 01 月 05 日 09 : 59 PM
如果觉得我的文章对你有用,请随意赞赏