以下题目是我在牛客网上看到的。
链接:https://www.nowcoder.com/questionTerminal/7beda454b8a444428dfb6b13f9787e96
来源:牛客网
1、分析代码是否有问题
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, "hello world" );
printf( str );
}
分析:代码有问题。输出的内容还是 NULL ,因为在传参时,p 和 str 同时指向一段新内存地址。但是在 GetMeory()函数中,p 又指向了一段新的内存,所以,str 指向的还是原来那个 NULL 。如果要改变 str 的值,需要传二级指针。什么意思呢,你要改变 a 的值,需要传 &a 。你要改变指针变量的值,需要传二级指针。最后注意:使用malloc(),还要使用 free()进行释放,否则会内存泄露。具体修改意见如下:
void GetMemory( char **p )
{
*p = (char **) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( &str );
strcpy( str, "hello world" );
printf( str );
free(str);
}
2、分析下面代码问题
char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}