# Pointer confusion

## Main Question or Discussion Point

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 : ')' - whats 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:

Related Programming and Computer Science News on Phys.org
chroot
Staff Emeritus
Gold Member
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