Linux の gcc では、この操作を使用しても問題はありません。
s->voti->next
しかし、WindowsのDevC++では、セグメンテーション違反になります:(
なんで?私は何を間違っていますか?:(
ここで完全なコードを見つけてください
- 82 行目( cur= cur->next はs->voti = s->voti->nextと等しくなければなりません)
Dev-C++はコンパイラではありません。それはIDEです。これは MinGW GCC (つまり GCC) にパッケージ化されていますが、使用している Dev-C++ のバージョンによっては、GCC の非常に古いバージョンである可能性があります。
とはいえ、これはコンパイラ間の違いではありません。無効なポインター (初期化されていないか、有効なアドレスが割り当てられていないポインター) を逆参照した場合、その後の動作は未定義です。「未定義」には、異なるプラットフォーム、異なるコンパイラ、異なるコンパイラ オプション、または同じマシン上の同じコードの異なる実行でさえ、動作が異なる可能性が含まれます。
つまり、この場合、コンパイラではなく、コード (投稿した行の前) に問題があるということです。Linux と Windows の両方で間違っている可能性がありますが、「未定義」の動作は予想どおり単純に異なります。
これは良い質問だとは思いませんが、187 行目の関数呼び出しは、にnew_node->voti
渡される前に初期化されていませんinsertMateria
。