内存复制函数:
void *memcpy(void *pvTo,const void *pvFrom,size_t size)
{
assert((pvTO !=NULL)&&(pvFrom != NULL))//使用断言,防止pvTo或pvFrom为NULL
typedef char byte
byte *pbto =(byte *)pvTo //防止改变pvTo的地址
byte *pbfrom = (byte *)pvFrom //防止改变pvFrom的地址
while(size-->0)
{
*pbTo++ = *pbFrom++
}
return pbto
}
关于内存思考:
第一种情况:
/*
*程序崩溃
*因为getmemory并不能传递动态内存,test函数中的str一直都是NULL。
*/
void getmemory(char *p)
{
p = (char *)malloc(100)
}
void test(void)
{
char *str = NULL
getmemory(str)
strcpy(str,"hello,world")//使程序崩溃
printf(str)
}
第二种情况:
/*
*可能是乱码
*因为getmemory返回的是只想“栈内存”的指针,该指针的地址不是NULL,
*但其原有的内容已经被清除,新内容不可知。
*/
char *getmemory(void)
{
char p[]="hello world"
return p
}
void test(void)
{
char *str = NULL
str=getmemory()
// strcpy(str,"hello,world")
printf(str)
}
第三种情况:
/*
*能够输出hello;
*内存泄露;
*
*/
void *getmemory(char **p,int num)
{
*p = (char *)malloc(num)
}
void test(void)
{
char *str = NULL
getmemory(&str,100)
strcpy(str,"hello")
printf(str)
}
第四种情况:
/*
*篡改动态内存区的内容,后果难以预料,非常危险。因为free(str)之后,str称为野指针,
*if(str!=NULL)语句不起作用
*/
void test(void)
{
char *str = (char *)malloc(100)
strcpy(str,"hello")
free(str)
if(str != NULL)
{
strcpy(str,"world")
printf(str)
}
}
问题:动态内存会被自动释放掉吗?
void Func(void)
{
char *p = (char *)malloc(100)
}
(1)指针消亡了,并不表示它指向的内存会被自动释放;
(2)内存被释放了,并不表示指针会消亡或者称为NULL;
看完这个应该能自己找出答案了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)