我可以为指向 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 cast malloc()
和系列的返回值。
第2点。无论如何,Cast
操作不会改变返回值,它与类型有关。
for head or dib member, how could I check that the malloc was successful?
您需要检查 bmp_ptr->header
的 NULL
。
- 如果
malloc()
成功分配内存,您将得到一个非NULL
值。 - 如果
malloc()
失败,它将返回NULL
。
dib
也是如此。
注意:考虑到 header
和 dib
是指针类型变量。 如果它们不是指针,则不需要分配内存使用malloc()
。
关于c - 如何检查嵌套结构的 malloc 结果?在C中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563409/