第一類問題:z指針作爲函數參數的傳遞問題
在將一個指針傳入函數並在函數中爲其分配內存空間的時候會出現下面的常用錯誤:
#include <cstring> using namespace std; //void GetMemory( char *p )//假如這裏是*p那麼在函數中就不是p指針本身而是臨時變量,所以最後分配的空間並不是爲原來的p分配的
void GetMemory( char *&p )
{ p = (char *) malloc( 100 ); } void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); // printf( str ); } int main() { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( "%s",str); return 0; }
一般有兩種解決的思路:
1.將原來的函數參數修改爲
void GetMemory( char *&p )
引用傳遞。這樣在函數內部就會爲原來的部分分配內存。
2.
返回指針。即使是值傳遞,將分配的指針傳遞回去,這樣的話也是可以的。
第二類問題:局部變量生存期的問題
char
*GetMemory(
void
)
{
char
p[] =
"hello world"
;
return
p;
}
void
Test(
void
)
{
char
*str = NULL;
str = GetMemory();
printf
( str );
}