C内存管理

内存管理相关函数

在C语言中,动态分配内存是指在程序运行时根据需要动态地申请一块内存空间。常用的动态内存分配函数有malloc()、calloc()和realloc()等。

1. malloc()函数:用于动态分配指定大小的内存空间,并返回一个指向该内存空间的指针。其语法格式为:

void* malloc(size_t size);

其中,size表示需要分配的内存大小,以字节为单位。如果分配成功,则返回指向该内存空间的指针;否则返回NULL。

2. calloc()函数:用于动态分配指定大小的内存空间,并将该空间初始化为零。其语法格式为:

void* calloc(size_t n, size_t size);

其中,n表示需要分配的元素个数,size表示每个元素的大小,以字节为单位。如果分配成功,则返回指向该内存空间的指针;否则返回NULL。

3. realloc()函数:用于重新分配之前由malloc()、calloc()或realloc()等函数分配的内存空间。其语法格式为:

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

其中,ptr表示指向之前分配的内存空间的指针,size表示新分配的内存大小,以字节为单位。如果分配成功,则返回指向该内存空间的指针;否则返回NULL。

需要注意的是,在使用完动态分配的内存后,应该使用free()函数将内存释放,以便其他程序可以使用。

动态分配内存举例

在C语言中,可以使用`malloc()`函数动态分配内存。下面是一个简单的例子:

#include

#include

int main() {

int n;

printf("请输入一个整数: ");

scanf("%d", &n);

// 动态分配内存

int *arr = (int *)malloc(n * sizeof(int));

if (arr == NULL)

{

printf("内存分配失败!");

return 1;

}

printf("请输入%d个整数: ", n);

for (int i = 0; i < n; i++)

{

scanf("%d", &arr[i]);

}

printf("你输入的整数为: ");

for (int i = 0; i < n; i++)

{

printf("%d ", arr[i]);

}

// 释放内存

free(arr);

return 0;

}

在这个例子中,我们首先从用户那里获取一个整数n,然后使用malloc()函数动态分配一个大小为n的整数数组。接着,我们从用户那里获取n个整数并存储在数组中。最后,我们输出这些整数并释放内存。

重新调整内存的大小和释放内存

在C语言中,可以使用realloc()函数来重新调整内存的大小。realloc()函数接受两个参数:一个指向已分配内存的指针和新的内存大小。如果内存分配成功,realloc()函数会返回一个新的指针,指向新分配的内存;如果内存分配失败,realloc()函数会返回NULL。

以下是一个简单的示例:

#include

#include

int main()

{

int n = 5;

int *arr = (int *)malloc(n * sizeof(int)); // 分配内存

if (arr == NULL) {

printf("内存分配失败!");

return 1;

}

// 使用内存

for (int i = 0; i < n; i++)

{

arr[i] = i + 1;

}

// 输出原始数组

printf("原始数组:");

for (int i = 0; i < n; i++)

{

printf("%d ", arr[i]);

}

// 重新调整内存大小

int new_n = 10;

int *new_arr = (int *)realloc(arr, new_n * sizeof(int));

if (new_arr == NULL)

{

printf("内存重新分配失败!");

free(arr); // 释放原始内存

return 1;

}

// 使用新的内存空间

for (int i = n; i < new_n; i++)

{

new_arr[i] = i + 1;

}

// 输出调整后的数组

printf("调整后的数组:");

for (int i = 0; i < new_n; i++)

{

printf("%d ", new_arr[i]);

}

// 释放内存

free(new_arr); // 释放原始内存

free(arr); // 释放调整后的内存

return 0;

}

在这个示例中,我们首先使用malloc()函数为一个整数数组分配内存。然后,我们使用realloc()函数将数组的大小调整为10。最后,我们释放了原始内存和调整后的内存。

你可能感兴趣的:(C,c语言)