我可以为指向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()
。CCD_ 11—ing for bmp_ptr
将为两者分配内存。
[当前已过时]
要点1。您不需要也请不要投射malloc()
和family的返回值。
第2点。无论如何,Cast
ing不会更改返回的值,它与类型有关。
对于head或dib成员,我如何检查malloc是否成功?
您需要对照NULL
检查bmp_ptr->header
。
- 如果
malloc()
成功分配内存,那么您将获得一个非NULL
值 - 如果
malloc()
失败,则返回NULL
dib
也是如此。
注意:考虑到header
和dib
是指针类型的变量 如果它们不是指针,则不需要使用malloc()
来分配内存