what flaw does realloc have? Please explain.

On Oct 21, 2009, at 9:47 PM, Ravi Mishra wrote:

> thanks john .give me a gud approach my code is in C language.
> I don't want to use realloc because realloc has some flaw. i just  
> want to
> use malloc..
> actually intally i don't know how much byte will allocate memory for
> sturcture and second time i have to preserve the first user memory and
> append second user allocate memory and so on.
>
> one apporach i am thinking i.e first user memory i will store and  
> found how
> many byte it is required and when second user allocate memory i just  
> coping
> memory allocation of first user in and append second user memory in  
> temp
> variable.
>
> may be i have to use realloc for this ..
>
> Any other approach is there...
>
> -Ravi
>
> On Thu, Oct 22, 2009 at 1:30 AM, johnmatthews2000 <jm5...@gmail.com>  
> wrote:
>
> >
> >
> >
> >
> > --- In c-prog@yahoogroups.com <c-prog%40yahoogroups.com>, Ravi  
> Mishra
> > <ravics...@...> wrote:
> > >
> > > I have a question regarding struct when making Table eg.
> >
> > C or C++?
> >
> > Basically your types X/Y/Z should contain pointers to the list  
> data, so the
> > data does not actually reside within the table structure itself.  
> Hence the
> > lists can grow without overwriting other fields within the table.
> >
> > In C++ (which isn't my language) there are Standard Library list  
> types
> > which you can use. In C you don't get any standard list types, but  
> there are
> > plenty of implementations out there that you can use.
> >
> > Here's a very simple C program that constructs a list from any  
> number of
> > values passed on the command line and prints them out. It makes  
> use of the
> > realloc() function to grow the list dynamically. Note that the list
> > structure only contains a pointer to the data, and not the data  
> itself.
> >
> > #include <assert.h>
> > #include <stdio.h>
> > #include <stdlib.h>
> >
> > /* List structure. */
> > typedef struct List_s
> > {
> > int *a; /* pointer to the data a[0..n-1] */
> > int n; /* size of list */
> > } List_t;
> >
> > /* Initialise the list. */
> > static void listInit(List_t *list)
> > {
> > list->a = NULL;
> > list->n = 0;
> > }
> >
> > /* Add the value to the end of the list. */
> > static void listAddEnd(List_t *list, int val)
> > {
> > /* First increase the size of the list by 1. If the value of list->a
> > * changes, then realloc() copies the data from the old location to
> > * the new location. */
> > list->a = realloc(list->a, (list->n + 1) * sizeof list->a[0]);
> >
> > /* Now store the value in the (empty) new location at end of the  
> list. */
> > list->a[list->n++] = val;
> > }
> >
> > /* Return the item at index idx in the list. */
> > static int listGet(const List_t *list, int idx)
> > {
> > /* Ensure the index is within bounds. */
> > assert(idx < list->n);
> >
> > return list->a[idx];
> > }
> >
> > /* Return the size of the list. */
> > static int listSize(const List_t *list)
> > {
> > return list->n;
> > }
> >
> > int main(int argc, char *argv[])
> > {
> > List_t list;
> > int i, size;
> >
> > listInit(&list);
> >
> > /* Add the values on the command line to the list.
> > * Ignore argv[0] which is the program name. */
> > for (argc--, argv++; argc--; argv++)
> > {
> > listAddEnd(&list, atoi(*argv));
> > }
> >
> > /* Output the contents of the list. */
> > for (size = listSize(&list), i = 0; i < size; i++)
> > {
> > printf("%2d: %8d\n", i, listGet(&list, i));
> > }
> >
> > return 0;
> > }
> >
> > $ gcc -Wall list.c
> > $ a.out 1 5 7 10 127
> > 0: 1
> > 1: 5
> > 2: 7
> > 3: 10
> > 4: 127
> >
> >
> >
>
> [Non-text portions of this message have been removed]
>
> 



[Non-text portions of this message have been removed]

Reply via email to