我可以为指向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;
答案 0 :(得分:1)
[在评论后添加]
TL; DR - 您不需要为编译时分配的变量分配动态内存[或者,检查地址是否为NULL
]。它们将始终具有定义的内存位置,并且不能为NULL。
由于您的header
和dib
不是指针变量,因此您不需要单独malloc()
。 malloc()
- bmp_ptr
将为他们分配内存。
[目前已过时]
要点1.您不需要do not cast malloc()
和家人的返回值。
第2点。无论如何,Cast
ing不会更改返回值,它与类型相关。
对于head或dib成员,我怎么能检查malloc是否成功?
您需要NULL
查看bmp_ptr->header
。
malloc()
成功分配内存,您将拥有非NULL
值。malloc()
失败,则会返回NULL
。同样适用于dib
。
注意:考虑header
和dib
是指针类型变量。如果它们不是指针,则不需要使用malloc()
分配内存