卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章18067本站已运行3329

动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译

动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译时确定内存大小。这使得程序能够更灵活地管理内存,并有效地利用可用的系统资源

这里我们将了解什么是 C 语言中的动态内存分配。C 编程语言提供了多个用于内存分配和管理的函数。这些函数可以在 头文件中找到。以下函数用于内存分配。

函数描述
void *calloc(int num, int size);这个函数分配一个由 num 个元素组成的数组,每个元素的大小以字节为单位。
void free(void *address); 该函数释放地址指定的一块内存块。
void *malloc(int num);该函数分配一个数组num 个字节并保持其未初始化。
void *realloc(void *address, int newsize);此函数重新-分配内存,将其扩展到newsize

动态分配内存

在编程时,如果您知道数组的大小,那么就很容易将其定义为数组。例如,要存储任何人的姓名,最多可以包含 100 个字符,因此您可以定义如下 -

'
char name[100];

但是现在让我们考虑一种情况,您不知道需要存储的文本的长度,例如,您想要存储有关某个主题的详细描述。这里我们需要定义一个指向字符的指针,而不定义需要多少内存,然后根据需要,我们可以分配内存,如下例所示 -

示例代码

'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory<p>");
   } else {
      strcpy( description, "Adam a DPS student in class 10th");
   }
   printf("Name = %s</p><p>", name );
   printf("Description: %s</p><p>", description );
}</p>

输出

'
Name = Zara Ali
Description: Zara ali a DPS student in class 10th

可以使用 calloc() 编写相同的程序;唯一的问题是您需要将 malloc 替换为 calloc,如下所示 -

'
calloc(200, sizeof(char));

因此,您拥有完全的控制权,可以在分配内存时传递任何大小值,这与数组不同,数组一旦定义了大小,就无法更改它。

调整内存位置的大小

当你的程序出来后,操作系统会自动释放你的程序分配的所有内存,但作为一个好习惯,当你不再需要内存时,你应该通过调用函数 free() 来释放该内存。

或者,您可以通过调用函数 realloc() 来增加或减少已分配内存块的大小。让我们再次检查上面的程序并使用 realloc() 和 free() 函数 -

示例代码

'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory<p>");
   } else {
      strcpy( description, "Adam a DPS student.");
   }
   /* suppose you want to store bigger description */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory</p><p>");
   } else {
      strcat( description, "He is in class 10th");
   }
   printf("Name = %s</p><p>", name );
   printf("Description: %s</p><p>", description );
   /* release memory using free() function */
   free(description);
}</p>

输出

'
Name = Adam
Description: Adam a DPS student.He is in class 10th

您可以尝试上面的示例,而无需重新分配额外的内存,strcat()函数将由于描述中缺少可用内存而给出错误。

上一篇: 使用C++找到数组中唯一配对的数量
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏