gpt4 book ai didi

c - 在 C 中取消引用 malloc() 的返回

转载 作者:太空狗 更新时间:2023-10-29 15:50:38 24 4
gpt4 key购买 nike

我需要为指向结构的指针数组分配内存。 malloc() 的文档指出,此函数的返回值会返回指向分配的第一个内存块的指针。好吧,在我的例子中,我这样调用函数:

malloc(SIZE_TABLE*sizeof(struct structName*))

问题在于,由于 malloc 返回指向此内存的指针(包含指针),因此它将返回类型为 structName 的二星指针。

与其用额外的一行来分配 2 星指针然后取消引用它,不如取消引用调用本身?

代替:

struct structName** temp = malloc(SIZE_TABLE*sizeof(struct structName*))

struct structName* temp2 = *(temp);

你能不能做这样的事情:

struct structName* temp2 = *( malloc(SIZE_TABLE*sizeof(struct structName*)) );

我在 2 星指针方面做得很少,所以如果有更好的方法来解决这个问题(或者如果我只是想念这一切),请告诉我。

最佳答案

不,你不能直接这样做。

malloc 返回void*解引用一个void* 是未定义的,它会产生一个编译器警告.
但您可以将其转换为不同的指针类型,然后取消引用。
以下可能有效:

struct structName* temp2 = *((struct structName**)malloc(SIZE_TABLE*sizeof(struct structName*)));

但这是一个严重的内存泄漏,因为 malloc 的原始返回值丢失了并且根本不是好的做法不确定 malloc 的返回值。如果它是 NULL,则无法取消引用。

这样做还有另一个问题。 malloc 返回的地址处的值未初始化,因此在转换后取消引用它也会导致未定义的行为。

在取消引用任何指针之前,始终检查 NULL
始终保存 malloc 的返回值以供以后释放

关于c - 在 C 中取消引用 malloc() 的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21187881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com