重置內(nèi)存大小撑瞧,相當(dāng)于開辟一塊新的內(nèi)存 改變指針?biāo)赶虻膬?nèi)存塊努咐。
也就是相當(dāng)于 改變指針?biāo)赶虻膬?nèi)容。
改變形參的值需要傳遞形參的指針儿捧,這個時候需要傳遞 指針的指針給reset函數(shù)。
然后通過*p = 新的內(nèi)存地址值挑宠。來改變內(nèi)存菲盾。
//1.開辟新的內(nèi)存塊
//2.將舊內(nèi)存塊的值一一賦值給新內(nèi)存塊
//3.釋放舊內(nèi)存
//4.讓舊內(nèi)存塊的指針指向新的內(nèi)存塊
#include <stdio.h>
#include <malloc.h>
int reset(char**p, int size, int new_size)
{
? ? int ret = 1;
? ? int i = 0;
? ? int len = 0;
? ? char* pt = NULL;
? ? char* tmp = NULL;
? ? char* pp = *p;
? ? if( (p != NULL) && (new_size > 0) )
? ? {
? ? ? ? pt = (char*)malloc(new_size);
? ? ? ? tmp = pt;
? ? ? ? len = (size < new_size) ? size : new_size;
? ? ? ? for(i=0; i<len; i++)
? ? ? ? {
? ? ? ? ? ? *tmp++ = *pp++;? ? ?
? ? ? ? }
? ? ? ? free(*p);
? ? ? ? *p = pt;
? ? }
? ? else
? ? {
? ? ? ? ret = 0;
? ? }
? ? return ret;
}
int main()
{
? ? char* p = (char*)malloc(5);
? ? printf("%p\n", p);
? ? if( reset(&p, 5, 3) )
? ? {
? ? ? ? printf("%p\n", p);
? ? }
? ? free(p);
? ? return 0;
}