編輯:Here is方案的要點不同的輸出當單步計劃
我對這個完全糊塗了,這是我的主要程序:
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步驟直到打印語句時,我得到正確的值:7,56,58,11,239
這是怎麼回事?我認爲問題在於返回指向結構體的指針和內存中的相關區域被覆蓋,但我不確定。我怎樣才能解決它,並仍然返回一個指針,而不是一個結構的副本?
我認爲將絕對粘貼到您的'header'結構定義 – 2013-03-25 09:58:22
將是有用的,我已經更新了一個鏈接到完整程序的要點的問題。我需要使用malloc()嗎?如果是這樣,我不能再使用'head = {...}'定義了,對嗎? :( – chrissphinx 2013-03-25 11:58:12