C語言:使用realloc()函式重新分配記憶體
阿新 • • 發佈:2019-01-23
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;
}