2

オブジェクトをアーカイブするための小さな Objective-C プログラムを作成しました。オブジェクトは NSDictionary です。コンパイル時に問題はありませんでした。しかし、呼び出されると、端末に「Segmentation fault」というメッセージが表示され、アーカイブ XML ファイルは作成されませんでした。問題は writeToFile メソッドが原因でした。コメントアウトした後、エラーはありませんでした (もちろん、アーカイブもありませんでした)。このエラー メッセージは何を意味しますか? そして、それを修正する方法は?

問題の原因がわかりました。私のプログラムは本の例に基づいており、誤植があるため、辞書オブジェクトは実際には初期化されていません。申し訳ありませんが、質問する前にこの問題を十分に確認していませんでした。

4

3 に答える 3

2

セグメンテーション違反は、不正なポインタを逆参照しようとする試みによって発生します。writeToFile:渡すファイル インスタンスが nil である可能性があります。戻りコードが成功したことを確認し、ポインターがすべて有効であることを確認する必要があります。

その行をコメントアウトしてもクラッシュしないため、その呼び出しのすべてのパラメーターが有効であることを確認するだけで、バグを見つけることができます。

もう少し読む:

于 2012-07-23T13:00:10.570 に答える
2

通常、セグメンテーション違反は、プログラムがアクセスすべきではないメモリにアクセスしていることを意味します。プログラムをデバッガーで実行すると、エラーが発生した場所が表示されます。

于 2012-07-23T13:00:57.953 に答える
1

サンプル コードがなければ正確な問題を特定するのは困難ですが、CPU が所有していないメモリにアクセスしようとすると、セグメンテーション フォールトが発生します。これは通常、初期化されていない、または正しい場所を指していないポインターがあり、それを逆参照しようとしているためにクラッシュが発生したことを意味します。コードを調べて、すべてのポインターが期待どおりに動作していることを確認することをお勧めします。

于 2012-07-23T12:58:58.597 に答える