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

she*_*lbc 3 c malloc pointers dereference

我需要为结构指针数组分配内存.用于malloc()通知此函数返回的文档返回指向已分配的第一个内存块的指针.好吧,就我而言,我调用了这样的函数:

malloc(SIZE_TABLE*sizeof(struct structName*))

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

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

代替:

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

struct structName* temp2 = *(temp);

你可以这样做:

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

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

Dip*_*pto 5

不,你不能直接这样做.

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

struct structName* temp2 = *((struct structName**)malloc(SIZE_TABLE*sizeof(struct structName*)));
Run Code Online (Sandbox Code Playgroud)

但这是一个严重的内存泄漏,因为原来的返回值malloc已经丢失,并且根本不是好的做法,因为你不确定它的返回值malloc.如果是NULL解除引用是不可能的.

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

NULL在取消引用任何指针之前始终检查.
始终的返回值保存mallocfree它后面.