const char文字列が初期化された後に壊れてしまう不思議な問題が発生しました。Objective-C:const char *文字列が壊れている:何が起こっているのですか?
私はそうのようにポインタを宣言している私の.mファイルで:
const char *s;
@implementation MyClass
...
@end
それは-init
に初期化され、その時点で正常に見えるです:
-init
{
if (self = [super init]) {
s = [@"obfuscatedString" deobfuscatedCString];
}
return self;
}
その後、私は読むために来たときにポインタのアドレスは変更されませんが、値は上書きされています。
私は裸の必需品にそれを取り除き、文字列が他の方法で使用されていないことを確認し、それを破損する可能性があるとは思われません。
どうしたの?目的のいくつかの基本的なビットがありますか?私は気づいていませんか?
ご協力いただければ幸いです。あなたは本当に私たちに多くの情報を与えていない
あなたは '-init'方法を投稿してくださいもらえますか? – dasblinkenlight
私はobjective-Cで精巧ではありませんが、一般的に、範囲外のインデックスで配列にアクセスする、解放されたメモリブロックを使用するなど、間違ったメモリ操作によって破損が引き起こされる可能性があります。デバッガを使用して、メモリが変更された正確な場所を検出してみてください。また、いくつかのツールを使ってヒープエラーを捕まえることができます(Rational Purifyなど) –
'init'に' S'を設定しません。あるいは、グローバル変数は実際に 'SBSERVPATH'と呼ばれていますか? – mipadi