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*)) );
我在做二星指示时做的很少,所以如果有更好的方法来解决这个问题(或者如果我只是错过了解它的全部),请告诉我.
不,你不能直接这样做.
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在取消引用任何指针之前始终检查.和
始终的返回值保存malloc到free它后面.