我有这段代码:
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
我做错了什么?
答案 0 :(得分:3)
我做错了什么?
您正在访问您不应该访问的内存。您的程序受到不确定的行为。
rear
只指向一个struct Book
。 rear + 1
指出超出你分配的内存。
我不知道为什么你认为rear+1
与rear2
相同。 rear
和rear2
指向两个不同的malloc
调用返回的内存,并且不相关。