C++函數參數中指針傳遞的問題

第一類問題: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 ); 
}
這段代碼會出現問題。由於p是函數中的局部變量。在返回時實際上已經將內存釋放。所以就會出現問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章