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函数显示重新分配的内存,如下所示。

