我有以下代码,在 64 位 linux 上,内核 2.6.x。据我了解,第一个 mallocrrr=malloc(8)
在堆上分配 8 个字节,而 rrr 现在包含这 8 个字节的起始地址的值。然后,我做一些疯狂的事情。我尝试将 8 字节指针存储在单个字节中,如*rrr = malloc(8)
. 然后我在第 5 个字节做同样的事情。单个字节最多只能容纳 255 的值,但是当我打印存储在这些字节中的值时,值大于 255。你能解释一下吗?
#include <stdlib.h>
#include <stdio.h>
void ** rrr;
int main(int argc, char ** argv)
{
rrr = malloc(8); // rrr should point to the starting address of an 8 byte block
*rrr = malloc(8);
*(rrr+5) = malloc(8);
for(int i =0;i< 8;i++)
printf("*rrr%d: %p\n", i, *(rrr+i)); // should print what is stored in each byte
return 0;
}
一次以上回报
*rrr0: 0x9ae030
*rrr1: (nil)
*rrr2: (nil)
*rrr3: 0x21
*rrr4: (nil)
*rrr5: 0x9ae050
*rrr6: (nil)
*rrr7: 0x21