📅  最后修改于: 2020-10-22 01:42:03             🧑  作者: Mango
使用c语言进行动态内存分配的概念使C程序员可以在运行时分配内存。可以通过stdlib.h头文件的4个功能以c语言进行动态内存分配。
在学习上述功能之前,让我们了解静态内存分配和动态内存分配之间的区别。
static memory allocation | dynamic memory allocation |
---|---|
memory is allocated at compile time. | memory is allocated at run time. |
memory can’t be increased while executing program. | memory can be increased while executing program. |
used in array. | used in linked list. |
现在让我们快速看一下用于动态内存分配的方法。
malloc() | allocates single block of requested memory. |
calloc() | allocates multiple block of requested memory. |
realloc() | reallocates the memory occupied by malloc() or calloc() functions. |
free() | frees the dynamically allocated memory. |
malloc()函数分配单个块的请求内存。
它不会在执行时初始化内存,因此它最初具有垃圾值。
如果内存不足,则返回NULL。
malloc()函数的语法如下:
ptr=(cast-type*)malloc(byte-size)
让我们看一下malloc()函数的示例。
#include
#include
int main(){
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc
if(ptr==NULL)
{
printf("Sorry! unable to allocate memory");
exit(0);
}
printf("Enter elements of array: ");
for(i=0;i
输出量
Enter elements of array: 3
Enter elements of array: 10
10
10
Sum=30
calloc()函数分配多个块的请求内存。
最初将所有字节初始化为零。
如果内存不足,则返回NULL。
calloc()函数的语法如下:
ptr=(cast-type*)calloc(number, byte-size)
让我们看一下calloc()函数的示例。
#include
#include
int main(){
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc
if(ptr==NULL)
{
printf("Sorry! unable to allocate memory");
exit(0);
}
printf("Enter elements of array: ");
for(i=0;i
输出量
Enter elements of array: 3
Enter elements of array: 10
10
10
Sum=30
如果内存不足以容纳malloc()或calloc(),则可以通过realloc()函数重新分配内存。简而言之,它会更改内存大小。
让我们看看realloc()函数的语法。
ptr=realloc(ptr, new-size)
必须通过调用free()函数释放由malloc()或calloc()函数占用的内存。否则,它将消耗内存,直到程序退出。
让我们看看free()函数的语法。
free(ptr)