1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
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 - malloc versus realloc

  1. May 17, 2014 #1
    There are two ways I'm used to allocate memory dynamically.

    int * array = malloc(10 * sizeof(int));

    But this type of memory allocation, have a predefined size, which is not desirable.
    I keep hearing about linked list and push & pop. I've reviewed them over and over again, and they just look like an awful mess, and they have so many drawbacks. Some of the "practical" examples for a linked list has shown to be like 40 pages long. Below is my own way of allocating dynamic memory using realloc. It's plain and simple. You start with an empty array, then add data when needed, and you can delete it when you don't need it anymore, or why bother, just replace it:

    #include <stdlib.h>
    #include <stdio.h>

    struct IO
    int myInput;

    } *pointer;

    int main ()
    // Put the two lines below in a loop which will fill up the dynamic array
    pointer = (struct IO *) realloc (pointer, n * sizeof(struct IO));
    pointer[n].myInput = myInput;

    free (pointer);

    Now you tell me, which one of these do you prefer, and would you still suggest me using a linked list or push & pop?
  2. jcsd
  3. May 17, 2014 #2


    Staff: Mentor

    There's a lot of mixing of concepts here. Perhaps if you focus on arrays vs linked lists and read this first it may help:


    The malloc/free and realloc are often used in the implementation of linked lists so once you understand the advantages of linked list then it will make more sense.

    In your case, using realloc might involve a copy of the original data to the new expanded area and thus incur a possible slowdown in your code whereas a linked list implementation will do things in smaller chunks and run smoother.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook