「C言語/構造体」の版間の差分

削除された内容 追加された内容
M 出典の置換
構造体を '=' でコピーする際の情報漏洩リスクを追加し、各注意点を itemize。
254 行
</syntaxhighlight>
 
これにより、右の構造体の全てのメンバが左の構造体の全てのメンバにコピーされるが、以下の点に注意する必要がある。
ただし、代入される構造体(上コードの左辺)と代入する構造体(上コードの右辺)は、構造体の型が一致していなければいけない<ref>[http://www.wisdomsoft.jp/343.html Wisdomソフト『7.3.1 ポインタにキャストする』、文「異なる構造体形は型に互換性がないため、代入は認められないのです。」]</ref>。(仮にもし、違う構造体型の構造体どうしがコピーや代入を出来たとしても、正常動作するかアヤシイので、避けたほうが良い。)
 
* '''漏洩への配慮'''
コピー元の構造体の隙間にメモリ上のデータが入り込んでいた場合、そのデータ毎コピーされるため、コピー先の構造体が外部からアクセス可能な場合、情報漏洩に繋がるリスクがある<ref>[https://kazkobara.github.io/c-resource-mgmt/struct.html 構造体 –漏洩させないための注意点–]</ref>。
 
* '''型の一致'''
右の構造体の全てのメンバが左の構造体の全てのメンバにコピーされる。
ただし、代入される構造体(上左辺)と代入する構造体(上右辺)構造体は、構造体の型が一致していなければいけない<ref>[http://www.wisdomsoft.jp/343.html Wisdomソフト『7.3.1 ポインタにキャストする』、文「異なる構造体形は型に互換性がないため、代入は認められないのです。」]</ref>。(仮にもし、違う構造体型の構造体どうしがコピーや代入を出来たとしても、正常動作するかアヤシイので、避けたほうが良い。)
ただし、構造体のメンバにポインタを含む場合、
 
この方法ではポインタの値がコピーされ、
いわゆる* '''浅いコピー(シャローコピー)となるので注意が必要である。'''
片方の構造体のポインタ先の値を変更すると、
構造体のメンバにポインタを含む場合、この方法ではポインタの値がコピーされ、片方の構造体のポインタ先の値を変更すると、もう片方の構造体のポインタ先の値まで変わってしまう、いわゆる浅いコピー(シャローコピー)となる。
いわゆる浅いコピー(シャローコピー)となるので注意が必要である。
 
<syntaxhighlight lang="C">