char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf(str);
}
解答:GetMemory中,p为局部变量,在函数返回后,该局部变量被回收。故而str仍为NULL;
void GetMemory( char **p, int num )
{
*p = (char *)malloc(num);
}
void Test( void )
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
解答:但在GetMemory内,未对*p为NULL情况的判断。当*p不为NULL时,在printf后,也未对malloc的空间进行free
char *memcpy( char *dest, const char *src,int len )
{
char* pDest = (char*)dest;
char* pSrc = (char*)src;
int pos;
for(pos=0;pos<len;pos++)
{
pDest[pos] = pSrc[pos];
}
return (char*)pDest;
}
解析:错误1:未对传入指针进行判断assert(dest !=NULL || src != NULL);
错误2:返回栈内指针,函数调用后指针空间释放,易造成内存非法访问