C-动态内存分配-realloc函数
时间:2020-02-23 14:31:54 来源:igfitidea点击:
在本教程中,我们将学习使用C编程语言动态分配内存的realloc函数。
realloc函数
我们使用realloc
函数来更改先前分配的内存空间的内存大小。
realloc语法
以下是realloc
函数的语法。
ptr = realloc(ptr, new_size);
其中," ptr"是指向分配的内存位置的指针。
new_size是新分配的大小。
注意事项
以下是使用realloc
函数时的注意事项。
该函数分配大小为" new_size"的新存储空间,并返回一个指针,该指针指向新近重新分配的存储空间的第一个地址。
" new_size"可以大于或者小于先前分配的存储空间。
新分配的存储块可能不会从与旧分配空间相同的位置开始。
如果声明的内存大小大于原始内存大小,并且在同一区域中没有空间容纳新的内存大小,则此函数会将新的内存块分配到其他位置,并将旧块的内容移至新的位置。
如果该函数无法获取新的大小存储位置,则它将返回NULL。
用C编写程序以重新分配先前分配的内存空间
在下面的代码中,我们首先使用malloc函数分配6个字节的char类型的内存空间。
然后,我们从用户那里输入5个字母的单词作为输入并将其保存在分配的内存空间中。
之后,我们使用realloc函数重新分配9个字节的char类型的内存空间。
然后,我们从用户那里输入8个字母的单词作为输入并将其保存在新重新分配的存储空间中。
最后一个字节用于存储NULL'\ 0'字符以标记字符串的结尾。
因此,6个字节的空间可以容纳5个字节的文本,类似地,9个字节的空间可以容纳8个字节的文本。
#include <stdio.h> #include <stdlib.h> int main(void) { //character pointer char *cptr = NULL; //allocate memory cptr = (char *) malloc (6 * sizeof(char)); //if failed if (cptr == NULL) { printf("Failed to allocate memory space. Terminating program..."); return -1; } //get some text printf("Enter 5 letters word: "); scanf("%s", cptr); //display printf("Word you entered: %s\n", cptr); //reallocate memory cptr = realloc(cptr, (9 * sizeof(char))); //if failed if (cptr == NULL) { printf("Failed to reallocate new memory space. Terminating program..."); return -1; } //content printf("\nContent of the allocated memory space after reallocation:\n"); printf("%s\n\n", cptr); //get some new text printf("Enter 8 letters word: "); scanf("%s", cptr); //display printf("Word you entered: %s\n", cptr); //free memory space free(cptr); return 0; }
Enter 5 letters word: hello Word you entered: hello Content of the allocated memory space after reallocation: hello Enter 8 letters word: computer Word you entered: computer
我们可以通过malloc函数来表示分配的内存,如下所示。
然后我们可以通过realloc
函数显示重新分配的内存,如下所示。