重置内存大小,相当于开辟一块新的内存 改变指针所指向的内存块。
也就是相当于 改变指针所指向的内容。
改变形参的值需要传递形参的指针,这个时候需要传递 指针的指针给reset函数。
然后通过*p = 新的内存地址值。来改变内存。
//1.开辟新的内存块
//2.将旧内存块的值一一赋值给新内存块
//3.释放旧内存
//4.让旧内存块的指针指向新的内存块
#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;
}