逐步执行程序时的不同输出

时间:2013-03-25 08:12:43

标签: objective-c pointers struct

编辑: 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步骤直到print语句我得到正确的值时:7,56,58,11,239

这里发生了什么?我认为问题在于返回一个指向结构的指针,并且内存中的相关区域被覆盖,但我不确定。我怎样才能解决它并仍然继续返回指针而不是结构的副本?

1 个答案:

答案 0 :(得分:1)

如你所料,你应该使用malloc,你的代码就像这样:

header *head=(header*)malloc(sizeof(header));
head->m=( *(short*)[[binHandle readDataOfLength:2] bytes] );
head->f=( *(short*)[[binHandle readDataOfLength:2] bytes] );
head->k=( *(short*)[[binHandle readDataOfLength:2] bytes] );
head->r=( *(short*)[[binHandle readDataOfLength:2] bytes] );
head->e=( *(short*)[[binHandle readDataOfLength:2] bytes] );
h = head;

原因是您分配了对局部变量的引用,该局部变量仅存在于方法范围中。在外面它将返回undefined。