Pointer Confusion: Solve the Mystery

  • Thread starter Thread starter martix
  • Start date Start date
  • Tags Tags
    Confusion
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
1 reply · 3K views
martix
Messages
167
Reaction score
5
There something really fishy going on here and I can't put my finger on it...
Here is the situation in condensed form:

Code:
	WordSt **stpt, *starr; //stpt - pointer to start of array; starr - array of pointers to the structs
...
		stpt=malloc(count*sizeof(starr*)); //syntax error : ')' - what's with that anyway?
		...
			starr[wz]=malloc(sizeof(WordSt)+len*sizeof(char)); //C2679: binary '=' : no operator found which takes a right-hand operand of type 'void *' (or there is no acceptable conversion) Trying to convert it doesn't cut it either...
			starr[wz]->len=len; //Says it need '.' When I put '.'(as in (*starr[wz]).len) it says "illegal indirection". Also any version with -> doesn't work
What I know - indexing is also a form of memory manipulation, so it should work. And (*b).el == b->el. Btw first option gives me an automatic menu for choosing between the elements, no such luck with the second one.
Help!
 
Last edited:
Physics news on Phys.org
There are so many things wrong here, it's hard to even know where to begin.

1) Give your variables meaningful names.
2) stpt is not a pointer, it's a pointer to a pointer. malloc returns a pointer, so you don't want to be assigning the result of malloc to stpt.
3) The syntax "starr*" is meaningless in the context you used it.
4) You're assigning values to starr[wz], but starr is a garbage pointer, and this will cause a segfault.
5) You need to cast the void* that malloc returns into the WordSt* you want it to be.
6) starr[wz] is a structure, not a pointer to a structure, so you should not be using ->, you should just be using dot-notation. You don't need to dereference starr[wz] at all, as starr[wz] is not a pointer. That's what "illegal indirection" means.

- Warren