当我使用malloc函数时,我一直收到错误

时间:2014-02-24 21:40:22

标签: c

            #include <stdio.h>
            #include <stdlib.h>


            struct node
            {
                int val;
                node * p_next; 
            };

            int main(void)
            {
                node *test; 

为节点指针分配适量的字节。

                test = malloc( sizeof(node) );
                test->val = 123;
                test->p_next = NULL; 

                printf("%d %p %p\n",test->val,test,test->p_next );

                free(test);

                printf("Press enter to continue.... \n");
                getchar();

                return 0;
            }

然后我得到这个错误,我不明白为什么我应该得到,即使我给了节点指针的类型。

error: invalid conversion from 'void*' to 'node*' [-fpermissive]
                  test = malloc( sizeof(node) );
                                              ^

2 个答案:

答案 0 :(得分:2)

您正在使用C ++编译器进行编译。这可以从错误消息中推断出来。在C中有效的是将void*(由malloc返回)分配给非void指针变量。但这在C ++中是无效的。你的编译器是一个C ++编译器。

如果您真的打算编写C,那么您将需要使用C编译器。

当您切换到C编译器时,您需要将结构引用为struct node或使用typedef将其引用为node

typedef struct node node;
struct node
{
    int val;
    node *p_next; 
};

当前代码接受没有typedef的普通node的原因是您正在使用C ++编译器进行编译。

答案 1 :(得分:-1)

除非您在其他地方有typedef,否则您需要在定义和演员阵容中引用struct node

struct node {
    int val;
    struct node * p_next;
};

int main(void)
{
    struct node *test;

    test = malloc(sizeof(struct node));
    ...
}