如何检查嵌套结构的 malloc 结果?在 C 中
How to check result of malloc for nested struct? In C
我可以为指向 struct bmp_ptr
的指针分配内存,并且我可以检查指针是否有效。但是我需要为 header
或 dib
成员分配内存,我如何检查 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。
因为你的header
和dib
不是指针变量,你不需要为它们单独malloc()
。 malloc()
-ing for bmp_ptr
将为它们分配内存。
[当前已过时]
要点1.你不需要也请do not castmalloc()
和家人的return价值。
第2点。无论如何,Cast
ing不会改变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
也一样。
注意:考虑到header
和dib
是指针类型变量。如果不是指针,则不需要分配使用 malloc()
.
的内存
我可以为指向 struct bmp_ptr
的指针分配内存,并且我可以检查指针是否有效。但是我需要为 header
或 dib
成员分配内存,我如何检查 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。
因为你的header
和dib
不是指针变量,你不需要为它们单独malloc()
。 malloc()
-ing for bmp_ptr
将为它们分配内存。
[当前已过时]
要点1.你不需要也请do not castmalloc()
和家人的return价值。
第2点。无论如何,Cast
ing不会改变return value,它与type.
for head or dib member, how could I check that the malloc was successful?
您需要对照 NULL
检查 bmp_ptr->header
。
- 如果
malloc()
成功分配内存,您将拥有非NULL
值。 - 如果
malloc()
失败,它将 returnNULL
。
dib
也一样。
注意:考虑到header
和dib
是指针类型变量。如果不是指针,则不需要分配使用 malloc()
.