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