加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:08:50 所属栏目:百科 来源:网络整理
导读:我需要为结构指针数组分配内存. malloc()的文档通知此函数的返回返回指向已分配的第一个内存块的指针.好吧,就我而言,我调用了这样的函数: malloc(SIZE_TABLE * sizeof(struct structName *)) 问题在于,由于malloc返回指向此内存的指针(包含指针),因此它将返
我需要为结构指针数组分配内存. malloc()的文档通知此函数的返回返回指向已分配的第一个内存块的指针.好吧,就我而言,我调用了这样的函数:

malloc(SIZE_TABLE * sizeof(struct structName *))

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

您可以取消引用呼叫本身,而不是使用额外的行来分配2星指针然后取消引用它吗?

代替:

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

struct structName * temp2 = *(temp);

你可以这样做:

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

我在做二星指示时做的很少,所以如果有更好的方法来解决这个问题(或者如果我只是错过了解它的全部),请告诉我.

解决方法

不,你不能直接这样做.

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

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

但这是一个严重的内存泄漏,因为malloc的原始返回值丢失并且根本不是好的练习,因为您不确定malloc的返回值.如果为NULL,则无法解除引用.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读