另外还想请问一下corrupt兄,既然在分配时前16位存储了分配的内存的大小,那么我们能不能有什么办法直接将前16位中的数读出来?如果能的话,那么就可以直接获得指针数组的长度了。
对于*(int *)((char *)p - 16)这个表达式的理解还是有点不太明白。(char *)p 是将任意指针类型的指针p转化成char指针类型,从而获得包括数组本身和前16位在内的整个数组的总位数,且最小单元为 1 位(而不是2位,4位或者8位),然后再将前16位刨除,就是数组本身的净位数。随后将这个净位数用int指针的最小单元去分解(int *),转化成整型指针。那么,对于(int *)((char *)p - 16)这样一个整型指针进行解引用是什么含义?
(由于我本人刚刚开始这方面的工作,以上问题有不对的地方还请海涵!)