
这里我们将了解什么是 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 #include #include 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"); } else { strcpy( description, "Adam a DPS student in class 10th"); } printf("Name = %s
", name ); printf("Description: %s
", description );}
输出
Name = Zara AliDescription: Zara ali a DPS student in class 10th
可以使用 calloc() 编写相同的程序;唯一的问题是您需要将 malloc 替换为 calloc,如下所示 –
立即学习“C语言免费学习笔记(深入)”;
calloc(200, sizeof(char));
因此,您拥有完全的控制权,可以在分配内存时传递任何大小值,这与数组不同,数组一旦定义了大小,就无法更改它。
调整内存位置的大小
当你的程序出来后,操作系统会自动释放你的程序分配的所有内存,但作为一个好习惯,当你不再需要内存时,你应该通过调用函数 free() 来释放该内存。
或者,您可以通过调用函数 realloc() 来增加或减少已分配内存块的大小。让我们再次检查上面的程序并使用 realloc() 和 free() 函数 –
示例代码
#include #include #include 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"); } 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
"); } else { strcat( description, "He is in class 10th"); } printf("Name = %s
", name ); printf("Description: %s
", description ); /* release memory using free() function */ free(description);}
输出
Name = AdamDescription: Adam a DPS student.He is in class 10th
您可以尝试上面的示例,而无需重新分配额外的内存,strcat()函数将由于描述中缺少可用内存而给出错误。
以上就是动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译时确定内存大小。这使得程序能够更灵活地管理内存,并有效地利用可用的系统资源的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444567.html
微信扫一扫
支付宝扫一扫