C/C++の関数の戻り値がポインタまたは参照の場合によくあるエラーのまとめ

967 ワード

1、説明
関数がポインタまたは参照の戻りである場合、一般的にグローバル変数、ローカル静的変数、ローカル動的割り当てメモリの変数は関数の戻り値として使用できます.ローカル変数はできません.ローカル変数関数の呼び出しが完了すると自動的にメモリが破棄されるので、このときに返されるポインタまたは参照に問題があります.
2、展示コード
#include 
#include 
#include 

using namespace std;

string& f1(const string &s)
{
    static string result = s;
    return result;
}
 
string f2(const string &s)
{
    string result = s;
    return result;
}


string &f3(const string &s)
{
    string *p = new string;
    *p = s;
    return *p;
}

int *f4() 
{
    int a = 10;
    return &a;
}

int *f5()
{
    static int a = 10;
    return &a;
}

int *f6()
{
   int *a = (int *)malloc(sizeof(int) * 10);
   *a = 10;
   *(a + 1) = 11;
   return a;
}

int &f7()
{
   int *a = (int *)malloc(sizeof(int) * 10);
   *a = 10;
   *(a + 1) = 11;
   return *a;
}

int &f8()
{
   int a = 10;
   return a;
}
int main()
{
    cout<