gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:25:30 24 4
gpt4 key购买 nike

我可以为指向 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com