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

Dynamic memory allocation and structure fields

  1. Dec 6, 2012 #1
    Please take a look at my program. Please help.

    I want to allocate memory dynamically for one field in structure.
    I tried to write the code but it has error. I posting a paint document for you to see. Help me please. Please tell me why is my code not working properly and what needs to be done.
    Thank you.

  2. jcsd
  3. Dec 6, 2012 #2

    Is this homework? It looks a little too pro.

    Your problem is that you don't seem to know what a pointer is or does. Think about it a while. It takes a bit of getting used to. Like s.x is not the same as s->x.
  4. Dec 6, 2012 #3


    User Avatar
    Homework Helper

    The definition for struct student should be moved to before main. The instance of s is OK to have in main. You need to allocate s before attempting to allocate s.name. There are other problems such as sizeof(name), which needs to be sizeof(struct student s.name).
  5. Dec 6, 2012 #4
    You want to have
    struct student s;
    instead of
    struct student *s;

    In the second case you have an uninitialized pointer, which means it points at garbage. There's no advantage to that.
  6. Dec 6, 2012 #5


    User Avatar
    Homework Helper

    or allocate s first and then allocate s->name. I'm not sure if you want s to be a pointer to a structure or an instance of a structure. You could also use a typedef to avoid having to use struct with each declaration:

    typedef struct
    int rno;
    char *name;
    float marks;

    then later in main you can use

    void main()
    STUDENT s; // declare an instance of s

    or if you want a pointer

    STUDENT *s = malloc(sizeof(STUDENT));
  7. Dec 12, 2012 #6
    This is how far I got after trying for three days. I know I can access structure members using .* or -> operators but it is not working in this case.
    Last edited: Dec 12, 2012
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook