跟随malloc返回的指针(0)

我想了解一部分代码。 我遗漏了很多代码,以便更容易解释,并避免不必要的混淆。

typedef void *UP_T; void FunctionC(void *pvD, int Offset) { unsigned long long int temp; void *pvFD = NULL; pvFD = pvD + Offset; temp = (unsigned long long int)*(int *)pvFD; } void FunctionB(UP_T s) { FunctionC(s, 8); } void FunctionA() { char *tempstorage=(char *)malloc(0); FunctionB(tempstorage); } int main () { FunctionA(); return 0; } 

就像我说的,我遗漏了大量的代码,因此它们看起来毫无用处,因为它们只有两行代码。

什么是temp ? 这让我很困惑。 当我运行与此代码类似的东西,并沿途使用printf()语句时,我得到pvD的随机数,而pvFD是随机数加8。

但是,我也可能错误地打印值(使用%llu而不是%d ,或类似的东西)。 我很确定它是一个指向tempstorage内存位置加上8的指针。这是正确的吗? 在我继续这个假设之前,我只想确定一下。

该标准指定malloc(0)返回NULL或有效指针, 但该指针永远不会被解除引用。 关于实际实现没有任何限制,因此您不能依赖返回的指针是另一个加8。

它是随机的,因为malloc通常是非确定性的(即从运行到运行得到不同的结果)。

malloc(0)的结果是实现定义的(但非常有效),你不应该取消引用它。 你也不应该尝试对它进行算术运算(但这通常是正确的;你不应该使用算术来创建超出分配内存边界的指针)。 但是, free使用它仍然没问题。