C 如何从动态创建结构的函数返回错误代码
我从create_node函数返回一个错误代码,这样,如果内存不可用,它将返回到main,程序结束。我得到一个错误,将整数与指针进行比较。你能帮我处理一下吗。我是初学者。谢谢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
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
指针吗?