如何检查嵌套结构的 malloc 结果?在 C 中

How to check result of malloc for nested struct? In C

我可以为指向 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;

[评论后添加]

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

因为你的headerdib不是指针变量,你不需要为它们单独malloc()malloc()-ing for bmp_ptr 将为它们分配内存。


[当前已过时]

要点1.你不需要也请do not castmalloc()和家人的return价值。

第2点。无论如何,Casting不会改变return value,它与type.

for head or dib member, how could I check that the malloc was successful?

您需要对照 NULL 检查 bmp_ptr->header

  • 如果 malloc() 成功分配内存,您将拥有非 NULL 值。
  • 如果 malloc() 失败,它将 return NULL

dib 也一样。

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

的内存