私のアプリケーションでは、データを解析するために、同様にネストされたリンクリストに従うネストされたループのペアがあります。私は愚かな大失敗を犯し、1 つの構造体を子構造体 EG としてキャストしました。
if (((ENTITY *) OuterEntityLoop->data)->visible == true) {
それ以外の:
if (((ENTITY_RECORD *) OuterEntityLoop->data)->entity->visible == true) {
これにより、実行の約 70% でアプリケーションが完全に停止するという問題が発生しました。プログラム フローの診断printf
は、奇妙な順序で実行されるか、まったく実行されず、ほとんどの場合、数回自然に回復しましたが、アプリが壊れました。
これが問題です。内部のロジックを完全に切り詰めた後でも、ロジックのバグに基づく無限ループではなく、ループに myのみが含まれるまで、printf
まだ壊れていました。
問題 2: 構造体が正しく識別されなかった場合、存在しないプロパティにアクセスしようとすると、既存のプロパティがなくてもエラーが発生しました。
私の質問は次のとおりです。
- なぜこのメモリが壊れたのですか?ガベージ メモリを読み取るだけで、プログラムの制御構造が破壊される可能性がありますか? そうでない場合、Electric Fence が文句を言わなくなったとしても、まだどこかに漏れがあるということですか?
- 存在しないプロパティについて不平を言った理由は、実際にあるものではなく、指定された型定義に従っているためだと思います。入力したので、これはあまり疑問の余地がありませんが、ここでベースから外れていないことを確認したいと思います.