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

标签 c pointers struct malloc

我可以为指向 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 cast malloc() 和系列的返回值。

第2点。无论如何,Cast操作不会改变返回,它与类型有关。

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

您需要检查 bmp_ptr->headerNULL

  • 如果malloc() 成功分配内存,您将得到一个非NULL 值。
  • 如果malloc()失败,它将返回NULL

dib 也是如此。

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

关于c - 如何检查嵌套结构的 malloc 结果?在C中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563409/

相关文章:

c - 字段的类型不完整 - union 和结构

c - C 中的正则表达式无法正常工作

c - 内存地址和内存地址中的值

Ruby 我们如何使用指针解冻字符串

c++ - 不了解指针和类在此示例中如何协同工作

typedef 结构体中 malloc/realloc 的正确用法

c - 从另一个 .c 文件访问相同的结构实例

c - ANSI C : How to split a string by newline and get a random line

c - 使用 cfitsio 库编译代码时 undefined reference

c - 如何通过引用访问调用中的结构类型?