LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   GCC Compilation Errors (https://www.linuxquestions.org/questions/programming-9/gcc-compilation-errors-239938/)

The_Dish 10-07-2004 03:33 PM

GCC Compilation Errors
 
I've created a linked list to store user data as part of a simple messenger program in C.

I'm recieiving two errors that seem simple but I'm overlooking the answer for whatever reason.

I declare a new linked list node and malloc space for it:

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

and gcc gives a warning:assignment makes pointer from integer without a cast.

Any ideas about that one?

I also have another line, just below the previous one where I'm setting the value of a string within my node structure:

newHead->status = "Free";

and gcc gives a warning: assignment makes integer from pointer without a cast.

The structure member "status" is of type char, if that helps.

I've been away from C for like 8 months so I'm a little rusty and not that good anyways... can anybody help me?

Thanks.
The_Dish

itsme86 10-07-2004 04:56 PM

Are you maybe compiling with g++ instead of gcc?

Also, the "status" member should be type char *, not char.

The_Dish 10-07-2004 05:20 PM

I have no idea if its g++...

I'm telneting into a school network and I know gcc and cc are available. Both of them are giving me these errors.

Changing "status" to type char * eliminated the second error but I have a question regarding that, when and how do I determine if I want to use a char* or just a char?

Does anyone else have any idea why I would be getting an error from the malloc line?

Thanks
The_Dish

itsme86 10-07-2004 05:30 PM

I get an error from malloc() when I compile with g++ and don't cast the return value. Here:
Code:

itsme@itsme:~/C$ cat sploof.c
#include <stdlib.h>

int main(void)
{
  typedef struct
  {
    int data;
  } node;
  node *newHead;

  newHead = malloc(sizeof(node));

  return 0;
}
itsme@itsme:~/C$ gcc -Wall sploof.c -o sploof
itsme@itsme:~/C$ g++ -Wall sploof.c -o sploof
sploof.c: In function `int main()':
sploof.c:11: error: invalid conversion from `void*' to `main()::node*'
itsme@itsme:~/C$

That's with gcc-3.4.2. Older versions of g++ might give a different error.

How exactly are you compiling your program?

And to answer your question, you use char * when you want to use a pointer to type char and you use char when you want a char.

The_Dish 10-07-2004 08:13 PM

I complie with:

gcc listapi.c

OR

cc listapi.c

I realize the difference between a char and a char*, I guess I just dont see when each one applies. A lot of the time in my notes from various classes, the prof's always seem to use char*'s as parameters and then randomly pick and choose between char's and char*s whenever declaring variables. But whatever, thanks for your help.

I also tried writing and compiling your code from the above reply and still recieved the same error message, so it must be the compiler at school.

The_Dish

itsme86 10-07-2004 08:53 PM

You'll get the error with gcc if you don't #include <stdlib.h>. The reason is because without the malloc() prototype the return type defaults to int instead of void * like it's supposed to be. If you #include <stdlib.h> the error/warning should go away.

char and char * are definitely very much different. It would be a very lengthy topic for me to get into, but a google search on pointers in C should reveal a lot.

RadHatter 10-08-2004 01:53 PM

It's usually a good idea to cast the return value of malloc to whatever pointer you're trying to make. A void *, which malloc returns, can't be dereferenced by itself and needs to be cast before dereferencing. I'd recommend changing your code to read:

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

Hivemind 10-08-2004 04:33 PM

If you code in C, it's not a good idea to cast the return value of malloc(), it's actually
a bad idea because will hide any failure to include the header where malloc() is declared,
namely stdlib.h.
In C++, on the other hand, you must cast what malloc() returns because C++ won't perform
that conversion automatically as C will. But if you use C++, you should always use new and
delete when allocating memory dynamically.


All times are GMT -5. The time now is 09:25 AM.