tags:

views:

893

answers:

5

hi, I am pretty new to C.

I am getting this error:

incompatible implicit declaration of built-in function ‘malloc’

Even when I fix the code based on the answers to include stdlib, I still get:

two or more data types in declaration specifiers

When trying to do this:

struct tnode
{
    int data;

    struct tnode * left;
    struct tnode * right;
}

struct tnode * talloc(int data){
    struct tnode * newTnode;
    newTnode = (struct tnode *) malloc (sizeof(struct tnode));
    newTnode -> data = data;
    newTnode -> left = NULL;
    newTnode -> right = NULL;
    return newTnode;
}

How do I fix it?

+3  A: 

"Implicit declaration" means that you're trying to use a function that hasn't been formally declared.

You probably forgot: #include <stdlib.h> which includes the function declaration for malloc.

jamesdlin
actually its a different error
SuperString
Implicit declaration means you went ahead and used a function without letting the compiler know about it ahead of time. So the compiler assumes the function returns an int (it's just making a guess). But malloc actually returns void*, so the assumption and the reality conflict.
Matt Greer
@SuperString: No fair. It was the correct answer to your original question.
jamesdlin
A: 

Ensure you have included the header file that contains the definition for malloc():

#include "stdlib.h"
Mitch Wheat
A: 

Do you have the appropriate header file included?

That is, is there a line at the top of your file that says

#include <stdlib.h>

Hope this helps.

mdec
+4  A: 

You have to put ; behind the struct declaration:

struct tnode
{
    int data;

    struct tnode * left;
    struct tnode * right;
}; // <-- here
sth
+1 for correct answer. The missing ; makes the compiler think that are trying to declare a variable named struct of type struct tnode.
John Knoeller
+4  A: 

Your original error was because you were attempting to use malloc without including stdlib.h.

Your new error (which really should have been a separate question since you've now invalidated all the other answers to date) is because you're missing a semicolon character at the end of the struct definition.

This code compiles fine (albeit without a main):

#include <stdlib.h>

struct tnode
{
    int data;

    struct tnode * left;
    struct tnode * right;
};

struct tnode * talloc(int data){
    struct tnode * newTnode;
    newTnode = (struct tnode *) malloc (sizeof(struct tnode));
    newTnode -> data = data;
    newTnode -> left = NULL;
    newTnode -> right = NULL;
    return newTnode;
}
paxdiablo