【发布时间】:2017-09-07 16:05:17
【问题描述】:
在阅读此article 时,我看到了这段:
指向对象的指针可能大小相同但格式不同。这 如下代码所示:
int *p = (int *) malloc(...); ... free(p);此代码可能在 int * 和 char * 具有 不同的表示,因为 free 需要后者的指针 输入。
这不是我第一次读到free 需要char* 类型。
我的问题是,如何释放p?
【问题讨论】:
-
free采用void *,而不是char *。获取最近(即不超过 18 岁且关于现代 C)的书。这也将解释语义,而不是投射malloc和朋友的结果。 -
但是
free期望void *作为参数。您链接到的文章是非常旧的。此外,您找到不同指针类型具有不同表示的系统的可能性微乎其微(除非您想专攻古代系统和计算机考古学) -
@Someprogrammerdude 即使文章很旧,作者也知道标准 C。所以我猜该段落是错误的而不是旧的。
-
@BiteBytes 但是 C 直到 1989 年 (ANSI) 和 1990 年 (ISO) 才真正标准化,所以到本文最初撰写时,可能已经有大量可用的预标准编译器。今天,唯一不符合现代标准的广泛使用的 C 编译器是 Microsoft Visual Studio C 编译器(尽管它仍然完全兼容 C89/90)。
-
嗯,它是关于可移植性的,当时并非所有编译器都符合标准,这可能是你引用的原因。因此,为了便于移植(当时),不能假设
free函数采用了void *参数(或者malloc返回了void *)。