Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Pointer confusion

  1. Apr 4, 2008 #1
    There something really fishy going on here and I can't put my finger on it...
    Here is the situation in condensed form:

    Code (Text):
        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: Apr 4, 2008
  2. jcsd
  3. Apr 4, 2008 #2

    chroot

    User Avatar
    Staff Emeritus
    Science Advisor
    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
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Pointer confusion
  1. This pointer (Replies: 2)

  2. Pointers and classes (Replies: 1)

  3. Use of pointers (Replies: 3)

  4. Pointers and strings (Replies: 19)

Loading...