[解決済み] 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
は高価な操作です)。
関連
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み] 構造体のsizeofは、なぜ各メンバーのsizeofの合計と等しくないのですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] 構造体の定義は.hと.cのどちらに書くべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み】C言語で関数から `struct` を返します。