編集: ここにプログラムの要点があります
私はこれに完全に混乱しています、これが私のメインプログラムです:
NSString* binPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/BPlusTree/BinaryCodeIndex.bin"];
CMCodeIndex* index = [[CMCodeIndex alloc] initWithFile:binPath];
header* h = [index header];
NSLog(@"%hd, %hd, %hd, %hd, %hd", h->m, h->r, h->e, h->f, h->k);
CMCodeIndexクラスが行うのは、バイナリファイルから5つの短い値を読み取ることだけです。クラス内の構造体に格納されます。次に、構造体へのポインターを取得し、値を出力します。
プログラムを正常に実行すると、予期しない出力が表示されます:27728、29557、29268、25957、26157
ヘッダー値ではありません。しかし、行を中断しheader* h = [index header];
てlldbを実行すると、printステートメントが正しい値になります:7、56、58、11、239
ここで何が起こっているのですか?問題は、構造体へのポインタとメモリ内の関連領域が上書きされることにあると思いますが、よくわかりません。どうすればそれを解決し、構造体のコピーの代わりにポインタを返し続けることができますか?