- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Objective-Cのメソッド、または文字列操作の実装について)
Objective-Cメソッド実装でのSIGABRTクラッシュの原因は何か?
このQ&Aのポイント
- Objective-Cのメソッド実装において、SIGABRTを受け取りクラッシュする場合、原因は文字列操作の実装にあります。
- クラッシュログを解析すると、特定のコード部分でクラッシュが起きていることがわかります。
- 具体的には、指定された範囲外の文字列の切り出しを行っているためにエラーが発生しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 returnのタイミングでリリースされているのではなく、戻り値として取得ポインタを使用しようとしたタイミングでアボートとしているのだろうと思います。 私の環境で同じ関数を作成し、そのポインタをNSLogで使用しようとしたところ、NSLog中にエラーとなりました。
その他の回答 (2)
- tanma3
- ベストアンサー率58% (14/24)
回答No.2
それは文字列格納されているメモリー領域がリリースされてのこってないから。それにアクセスした時点でアボートになります。 [[aDate description]retain]などとしてメモリーがリリースされないよう明示しないといけないです。 その後自分で、使わなくなったらreleaseしなとメモリーリークになるんで気をつけてください。
質問者
補足
回答有難うございます。 なるほど、と言った感じです。 aStrが自動開放されていると言う理解でいいですか? ただ、よくわからない点があるのですが、 自動開放はイベントループごとにされているはずですが、 なぜreturnまでの間に自動開放されてしまうのでしょうか? メソッド内でイベントループが終了するということはないと思うのですが・・・、 Cocoaは難しいです。 この辺のこともわかりますか?
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
Objective-C も Cocoa も知らないので当てずッぽだけど, 「aStr の長さが足りない」とかいうオチはある?
質問者
補足
回答ありがとうございます。 aStrには「YYYY-MM-DD HH:mm +msec」という形式で 日付が入っています。 なので長さは大丈夫そうです。 でも、aStrに何か問題ありって考えるのは自然ですね。 その方向でもっと調べてみます。
お礼
回答ありがとうとざいます。 大変助かりました。 そんなことがあるんですね。 やっぱりCocoaは難しいです。