-1

Linux の gcc では、この操作を使用しても問題はありません。

s->voti->next

しかし、WindowsのDevC++では、セグメンテーション違反になります:(

なんで?私は何を間違っていますか?:(

ここで完全なコードを見つけてください

  • 82 行目( cur= cur->next はs->voti = s->voti->nextと等しくなければなりません)
4

2 に答える 2

1

Dev-C++コンパイラではありません。それはIDEです。これは MinGW GCC (つまり GCC) にパッケージ化されていますが、使用している Dev-C++ のバージョンによっては、GCC の非常に古いバージョンである可能性があります。

とはいえ、これはコンパイラ間の違いではありません。無効なポインター (初期化されていないか、有効なアドレスが割り当てられていないポインター) を逆参照した場合、その後の動作は未定義です。「未定義」には、異なるプラットフォーム、異なるコンパイラ、異なるコンパイラ オプション、または同じマシン上の同じコードの異なる実行でさえ、動作が異なる可能性が含まれます。

つまり、この場合、コンパイラではなく、コード (投稿した行の前) に問題があるということです。Linux と Windows の両方で間違っている可能性がありますが、「未定義」の動作は予想どおり単純に異なります。

于 2013-02-03T10:54:50.503 に答える
1

これは良い質問だとは思いませんが、187 行目の関数呼び出しは、にnew_node->voti渡される前に初期化されていませんinsertMateria

于 2013-02-03T09:14:12.640 に答える