在C中取消引用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的返回值以便以后释放它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |