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 |
Are you maybe compiling with g++ instead of gcc?
Also, the "status" member should be type char *, not char. |
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 |
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 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. |
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 |
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. |
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)); |
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 08:03 PM. |