Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从动态创建结构的函数返回错误代码_C_Pointers_Struct_Integer_Incompatibletypeerror - Fatal编程技术网

C 如何从动态创建结构的函数返回错误代码

C 如何从动态创建结构的函数返回错误代码,c,pointers,struct,integer,incompatibletypeerror,C,Pointers,Struct,Integer,Incompatibletypeerror,我从create_node函数返回一个错误代码,这样,如果内存不可用,它将返回到main,程序结束。我得到一个错误,将整数与指针进行比较。你能帮我处理一下吗。我是初学者。谢谢 node *create_node(void) { node *newnode = (node *)malloc(sizeof(node)); if (newnode == NULL) return 1; newnode->right = NULL; newnode

我从create_node函数返回一个错误代码,这样,如果内存不可用,它将返回到main,程序结束。我得到一个错误,将整数与指针进行比较。你能帮我处理一下吗。我是初学者。谢谢


node *create_node(void)
{
    node *newnode = (node *)malloc(sizeof(node));

    if (newnode == NULL)
        return 1;
    newnode->right = NULL;
    newnode->left = NULL;
    return newnode;
}
root
是指向
节点的指针,您可以将其与
1
int
值进行比较。这就是为什么会发生将整数与指针进行比较的错误

在C语言中,不允许将指针与
int
进行比较。如果没有将
int
转换为指针类型,则至少不允许进行比较


解决方案: 如果
create_node()
中的分配失败,您应该返回
NULL
指针,而不是返回
1

 node *newnode = malloc(sizeof(*newnode));

 if (newnode == NULL)
 {
     return NULL;
 }
然后在
main()中的
root
中检查
NULL


旁注:

  • 发生错误时,
    main()
    的返回值应为非零(
    1
    是常见的)
  • 您不需要强制转换
    malloc()
    的结果。以下是一个链接:
  • malloc(sizeof(*newnode))
    -使用此选项可确保分配的空间始终适合指针
    newnode
    指向的对象(如果以后要更改
    newnode
    指向的结构,则此点很重要)
  • root
    是指向
    节点的指针,您可以将其与
    1
    int
    值进行比较。这就是为什么会发生将整数与指针进行比较的错误

    在C语言中,不允许将指针与
    int
    进行比较。如果没有将
    int
    转换为指针类型,则至少不允许进行比较


    解决方案: 如果
    create_node()
    中的分配失败,您应该返回
    NULL
    指针,而不是返回
    1

     node *newnode = malloc(sizeof(*newnode));
    
     if (newnode == NULL)
     {
         return NULL;
     }
    
    然后在
    main()中的
    root
    中检查
    NULL


    旁注:

  • 发生错误时,
    main()
    的返回值应为非零(
    1
    是常见的)
  • 您不需要强制转换
    malloc()
    的结果。以下是一个链接:
  • malloc(sizeof(*newnode))
    -使用此选项可确保分配的空间始终适合指针
    newnode
    指向的对象(如果以后要更改
    newnode
    指向的结构,则此点很重要)

  • 根据C标准(6.5.9等式运算符),关于指针和整数的比较

    2下列其中一项应适用:

    -两个操作数都具有算术类型

    -两个操作数都是指向的限定或非限定版本的指针 兼容类型

    -一个操作数是指向对象类型的指针,另一个是 指向void的合格或不合格版本的指针;或

    -一个操作数是指针,另一个是空指针常量

    因此,在不强制转换的情况下,不能比较指针和整数

    但在任何情况下,当内存分配失败时,都不需要返回整数。在这种情况下,返回NULL就足够了

    所以函数可以看起来像

    node * create_node(void)
    {
        node *newnode = malloc( sizeof( node ) );
    
        if  ( newnode != NULL )
        {
            newnode->right = NULL;
            newnode->left  = NULL;
        }
    
        return newnode;
    }
    
    因此,大体上你可以写一个例子

    node *root = create_node();
    
    if ( root == NULL ) {
        printf("Memory not available to create a node\n");
        return 0;
    }
    

    没有得到编译器的错误信息。

    根据C标准(6.5.9等式运算符),与指针和整数的比较相关的

    2下列其中一项应适用:

    -两个操作数都具有算术类型

    -两个操作数都是指向的限定或非限定版本的指针 兼容类型

    -一个操作数是指向对象类型的指针,另一个是 指向void的合格或不合格版本的指针;或

    -一个操作数是指针,另一个是空指针常量

    因此,在不强制转换的情况下,不能比较指针和整数

    但在任何情况下,当内存分配失败时,都不需要返回整数。在这种情况下,返回NULL就足够了

    所以函数可以看起来像

    node * create_node(void)
    {
        node *newnode = malloc( sizeof( node ) );
    
        if  ( newnode != NULL )
        {
            newnode->right = NULL;
            newnode->left  = NULL;
        }
    
        return newnode;
    }
    
    因此,大体上你可以写一个例子

    node *root = create_node();
    
    if ( root == NULL ) {
        printf("Memory not available to create a node\n");
        return 0;
    }
    

    没有收到编译器的错误消息。

    您考虑过返回
    NULL
    指针吗?您考虑过返回
    NULL
    指针吗?