将指针移动1个结构块

时间:2015-10-04 05:05:44

标签: c pointers

我有这段代码:

struct Book
{
  int book_id;
};

/* navigator pointer */
struct Book *rear;

struct Book *temp;
/* making memory for storing First book */
temp = (struct Book*)malloc(sizeof(struct Book));
temp->book_id = 111;
rear = temp;

struct Book *temp2;
/* making memory for storing the Second book */
temp2 = (struct Book*)malloc(sizeof(struct Book));
temp2->book_id = 222;

/* I want to point to the second book with one block after my first base pointer */

struct Book *rear2 = rear + 1;
rear2 = temp2;

printf("---> #%d\n", (rear+1)->book_id);    
int i;
for ( i = 0; i < 2; i++) {
    printf("i = %d  ", i);        
    printf("---> #%d\n", (rear+i)->book_id);
}

所以我希望得到这个结果:

i = 0  ---> #111
i = 1  ---> #222

但我得到了这个,因为显然我没有正确地指向我的第二个Book

i = 0  ---> #111
i = 1  ---> #0

我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

我做错了什么?

您正在访问您不应该访问的内存。您的程序受到不确定的行为。

rear只指向一个struct Bookrear + 1指出超出你分配的内存。

我不知道为什么你认为rear+1rear2相同。 rearrear2指向两个不同的malloc调用返回的内存,并且不相关。