这里我们将了解什么是 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><p>"); } else { strcpy( description, "Adam a DPS student in class 10th"); } printf("Name = %s</p><p>", name ); printf("Description: %s</p><p>", description ); }
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><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); }
Name = Adam Description: Adam a DPS student.He is in class 10th
您可以尝试上面的示例,而无需重新分配额外的内存,strcat()函数将由于描述中缺少可用内存而给出错误。
以上是动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译时确定内存大小。这使得程序能够更灵活地管理内存,并有效地利用可用的系统资源的详细内容。更多信息请关注PHP中文网其他相关文章!