gpt4 book ai didi

c - C 中 If 语句中的 Malloc

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:57 26 4
gpt4 key购买 nike

我是 c 的新手,我无法理解以下代码。如果有人能解释一下,我真的很高兴。提前致谢。

 if( ! ( st_cur = (struct ST_info *) malloc(sizeof( struct ST_info ) ) ) )
{
perror( "malloc failed" );
return( 1 );
}

最佳答案

让我们分解一下。

if( ! ( st_cur = (struct ST_info *) malloc(sizeof( struct ST_info ) ) ) )
{
perror( "malloc failed" );
return( 1 );
}

相当于:

struct ST_info * st_cur = NULL;
//...

/* Assign heap memory of native byte size equal to that
* of struct ST_info and save a pointer to the allocated
* memory. */
st_cur = malloc( sizeof( struct ST_info ) );

/* If the malloc succeeded it will have returned a valid
* pointer to some part of the heap, otherwise it returns
* NULL so we check for NULL here. */
if (st_cur == NULL) {
/* Print a relevant error message to stderr. */
perror("malloc failed");
/* Return a non-zero value to indicate that something failed. */
return(1);
}

如果您稍后希望释放内存,在完成程序之前应该对所有动态分配的内存执行此操作,您可以使用 free()。在这里你不需要首先检查 NULL 因为 A) 上面的 if 应该已经捕获它,并且 B) 如果通过了 NULL 然后 free 安全地什么都不做。

malloc 可能由于系统无法分配请求的内存量而失败。如果传递给 malloc 的大小为,则返回值取决于实现,但返回的指针不应被取消引用。

此外,不显式转换 malloc 返回的值已成为一种很好的做法,因此

 st_cur = (struct ST_info *) malloc(sizeof( struct ST_info ) )

成为

 st_cur = malloc(sizeof( struct ST_info ) )

关于c - C 中 If 语句中的 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830584/

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