📜  C动态内存分配(1)

📅  最后修改于: 2023-12-03 14:40:25.567000             🧑  作者: Mango

C动态内存分配

动态内存分配是指在程序运行时动态地分配内存。在C语言中,使用malloc()、calloc()和realloc()三个函数来实现动态内存分配。

1. malloc函数

malloc函数用于申请一块指定大小的内存空间,并返回该空间的首地址。

void *malloc(size_t size);

其中,size_t是一个无符号整型,表示要申请的内存空间的大小,单位是字节(Byte)。

下面是一个使用malloc函数分配一维和二维数组的示例:

int n = 10;
int *array = NULL;
array = malloc(n * sizeof(int));  // 申请一维数组空间
if (array == NULL) {
    printf("Failed to allocate memory.");
    return -1;
}

int m = 5;
int **matrix = NULL;
matrix = malloc(m * sizeof(int *));
if (matrix == NULL) {
    printf("Failed to allocate memory.");
    return -1;
}
for (int i = 0; i < m; i++) {
    matrix[i] = malloc(n * sizeof(int));  // 申请二维数组空间
    if (matrix[i] == NULL) {
        printf("Failed to allocate memory.");
        return -1;
    }
}
2. calloc函数

calloc函数用于申请一块指定大小的内存空间,并初始化为0,并返回该空间的首地址。

void *calloc(size_t nmemb, size_t size);

其中,nmemb和size两个参数都是无符号整型,nmemb表示要申请的内存空间的个数,size表示每个元素的大小。

下面是一个使用calloc函数申请一维数组的示例:

int n = 10;
int *array = NULL;
array = calloc(n, sizeof(int));  // 申请一维数组空间
if (array == NULL) {
    printf("Failed to allocate memory.");
    return -1;
}
3. realloc函数

realloc函数用于重新分配内存空间,并返回该空间的首地址。如果重新分配的空间大小比原来的空间大小要大,那么新分配的空间将被初始化为0。

void *realloc(void *ptr, size_t size);

其中,ptr是一个指向以前由malloc、calloc或realloc函数返回的内存空间的指针,size表示要重新分配的内存空间大小。

下面是一个使用realloc函数重新分配一维数组的示例:

int n = 10;
int *array = NULL;
array = malloc(n * sizeof(int));  // 申请一维数组空间
if (array == NULL) {
    printf("Failed to allocate memory.");
    return -1;
}

int m = 20;
array = realloc(array, m * sizeof(int));  // 重新分配一维数组空间
if (array == NULL) {
    printf("Failed to reallocate memory.");
    return -1;
}
4. 释放内存空间

动态分配的内存空间必须在使用完毕后及时释放,以免造成内存泄漏。使用free函数可以释放动态分配的内存空间。

void free(void *ptr);

其中,ptr是一个指向以前由malloc、calloc或realloc函数返回的内存空间的指针。

下面是一个释放动态分配的内存空间的示例:

int *array = malloc(n * sizeof(int));  // 申请一维数组空间
if (array == NULL) {
    printf("Failed to allocate memory.");
    return -1;
}
...
free(array);  // 释放一维数组空间