1. ホーム
  2. c++

[解決済み] CやC++で構造体を返すのは安全ですか?

2023-05-12 17:45:31

質問

私が理解しているのは、これはやってはいけないということですが、次のような例を見たことがあります(コードが必ずしも構文的に正しいわけではありませんが、アイデアはそこにあります)。

typedef struct{
    int a,b;
}mystruct;

そして、以下は関数です。

mystruct func(int c, int d){
    mystruct retval;
    retval.a = c;
    retval.b = d;
    return retval;
}

このようなことをしたい場合、常にmallocされた構造体へのポインタを返すべきだと理解していましたが、私はこのようなことをする例を見たことがあります。これは正しいのでしょうか?個人的には、mallocされた構造体へのポインタを返すか、関数への参照渡しを行い、そこで値を変更することにしています。(私の理解では、関数のスコープが終わると、構造体を割り当てるために使用されたスタックはすべて上書きされる可能性があるからです)。

質問に第二の部分を追加しましょう。これは、コンパイラーによって異なるのでしょうか。もしそうなら、デスクトップ用のコンパイラーの最新バージョンである gcc、g++、および Visual Studio での動作はどうなっているのでしょうか?

この件に関するご意見は?

どのように解決するのですか?

完全に安全であり、そうすることが間違っているわけではありません。また、コンパイラによって異なることはありません。

通常、(あなたの例のように)構造体があまり大きくない場合、このアプローチはmallocされた構造体を返すよりもさらに良いと主張するでしょう( malloc は高価な操作です)。