c言語におけるrealloc()関数解析
801 ワード
http://blog.csdn.net/hackerain/article/details/7954006
realloc(void*_ptr,sizaut size):設定されたメモリ空間を変更します.すなわち、malloc関数によって割り当てられたメモリ空間のサイズを変更します.
割り当てられたメモリを減らすと、reallocはインデックスを変えるだけの情報で元のポインタに戻ります.
size=0なら、メモリを放出するのと同じです.
割り当てられたメモリを拡大する場合、現在のメモリセグメントの後ろに必要なメモリ空間があれば、このメモリ空間を直接拡張し、realloc()が元のポインタに戻る場合があります.2)現在のメモリセグメントの後の空きバイトが足りない場合、この要求を満たすために最初のメモリブロックを使用して、現在のデータを新しい位置にコピーし、元のデータブロックをリリースして、新しいメモリブロックの位置に戻ります.3)もしアプリケーションが失敗したら、NULLに戻ります.この場合、元のポインタはまだ有効です.
realloc(void*_ptr,sizaut size):設定されたメモリ空間を変更します.すなわち、malloc関数によって割り当てられたメモリ空間のサイズを変更します.
割り当てられたメモリを減らすと、reallocはインデックスを変えるだけの情報で元のポインタに戻ります.
size=0なら、メモリを放出するのと同じです.
割り当てられたメモリを拡大する場合、現在のメモリセグメントの後ろに必要なメモリ空間があれば、このメモリ空間を直接拡張し、realloc()が元のポインタに戻る場合があります.2)現在のメモリセグメントの後の空きバイトが足りない場合、この要求を満たすために最初のメモリブロックを使用して、現在のデータを新しい位置にコピーし、元のデータブロックをリリースして、新しいメモリブロックの位置に戻ります.3)もしアプリケーションが失敗したら、NULLに戻ります.この場合、元のポインタはまだ有効です.
int *p1 = (int *)malloc(sizeof(int) *100);
for (int i = 0; i < 100 ;++i)
p1[i] = i;
int *p2 = (int *)realloc(p1, sizeof(int) *2);
cout<<p1<<endl<<p2<<endl;
free(p2);// , realloc , , p2