如何检查嵌套struct的malloc结果?在C.

时间:2015-02-17 14:14:20

标签: c pointers struct malloc

我可以为指向struct bmp_ptr的指针分配内存,我可以检查指针是否有效。但我需要为headerdib成员分配内存,如何检查malloc()是否成功?我可以malloc(),但使用类型转换意味着来自malloc()的结果指针将消失。我怎么能声明嵌套类型?

header:
typedef struct BMP_DIB BITMAPINFOHEADER;
// BMP_DIB definition follows..

// BMP_FILE_struct definition follows:
    typedef struct BMP_FILE_struct {
      BMPHEADER header;
      BITMAPINFOHEADER dib;
    } BMPFILE;

主要内部功能:

BMPFILE * bmp_ptr;
bmp_ptr = malloc(sizeof(BMPFILE));
if (bmp_ptr == NULL) return NULL;

1 个答案:

答案 0 :(得分:1)

[在评论后添加]

TL; DR - 您不需要为编译时分配的变量分配动态内存[或者,检查地址是否为NULL]。它们将始终具有定义的内存位置,并且不能为NULL。

由于您的headerdib不是指针变量,因此您不需要单独malloc()malloc() - bmp_ptr将为他们分配内存。


[目前已过时]

要点1.您不需要do not cast malloc()和家人的返回值。

第2点。无论如何,Cast ing不会更改返回,它与类型相关。

  

对于head或dib成员,我怎么能检查malloc是否成功?

您需要NULL查看bmp_ptr->header

  • 如果malloc()成功分配内存,您将拥有非NULL值。
  • 如果malloc()失败,则会返回NULL

同样适用于dib

注意:考虑headerdib是指针类型变量。如果它们不是指针,则不需要使用malloc()分配内存