1. 程式人生 > >C語言:使用realloc()函式重新分配記憶體

C語言:使用realloc()函式重新分配記憶體

realloc(void *__ptr, size_t __size):更改已經配置的記憶體空間,即更改由malloc()函式分配的記憶體空間的大小。

如果將分配的記憶體減少,realloc僅僅是改變索引的資訊。

如果是將分配的記憶體擴大,則有以下情況:
1. 如果當前記憶體段後面有需要的記憶體空間,則直接擴充套件這段記憶體空間,realloc()將返回原指標。
2. 如果當前記憶體段後面的空閒位元組不夠,那麼就使用堆中的第一個能夠滿足這一要求的記憶體塊,將目前的數 據複製到新的位置,並將原來的資料塊釋放掉,返回新的記憶體塊位置。
3. 如果申請失敗,將返回NULL,此時,原來的指標仍然有效。

注意:如果呼叫成功,不管當前記憶體段後面的空閒空間是否滿足要求,都會釋放掉原來的指標,重新返回一個指標,雖然返回的指標有可能和原來的指標一樣,即不能再次釋放掉原來的指標。

示例:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int size;
    int *number1 = NULL;
    int *number2;
    if ((number1=(int*)malloc(sizeof(int)*5))==NULL)
    {
        printf("menory allocated unsuccessful\n"
); exit(1); } printf("number1 adress:%d!\n",number1); for (int i = 0; i < 5; i++) *(number1 + i) = i; scanf("%d",&sizr); number2 = (int*)realloc(number1, size*sizeof(int)); if (number2 == NULL) { printf("menory allocated unsuccessful\n"); exit
(1); } printf("number2 adress:%d\n",&number2); free(number1);//釋放number1指標 *number1 = NULL; return 0; }