On Sat, 16 Feb 2002, Steve Fink wrote: > > - key->keys = (KEY_PAIR*)realloc(key->keys,sizeof(KEY_PAIR)*size); > > + key->keys = (KEY_PAIR**)realloc(key->keys,sizeof(KEY_PAIR)*size); > > That seems rather suspicious. I don't know anything about the KEY_PAIR > type, but allocating a chunk of memory big enough to fit N structures > and then using it as an array of pointers to individual structures... > well, something's fishy. >
key here is a KEY : struct _key { INTVAL size; KEY_PAIR** keys; }; typedef struct _key KEY So the cast to 'KEY_PAIR **' is valid - however I have a feeling that what might really be wanted on the RHS is 'sizeof(KEY_PAIR *)*size' - of course all that is happening if that is the case is that too much memory is being allocated to store the KEY_PAIR structures which is undesireable but not a showstopper :) The patch for key.c then would become : Index: key.c =================================================================== RCS file: /home/perlcvs/parrot/key.c,v retrieving revision 1.19 diff -u -r1.19 key.c --- key.c 11 Feb 2002 17:59:11 -0000 1.19 +++ key.c 17 Feb 2002 09:13:12 -0000 @@ -180,10 +180,10 @@ return; } if(size > key->size) { - KEY_PAIR* pair = (KEY_PAIR*)realloc(key->keys,sizeof(KEY_PAIR)*size); + KEY_PAIR* pair = (KEY_PAIR*)realloc(key->keys,sizeof(KEY_PAIR *)*size); if(pair != NULL) { INTVAL i; - key->keys = pair; + key->keys = (KEY_PAIR **)pair; for(i=key->size;i<size;i++) { key->keys[i]->type = enum_key_undef; } @@ -197,7 +197,7 @@ for(i=size;i<key->size;i++) { /* Memory leak in the making */ } - key->keys = (KEY_PAIR*)realloc(key->keys,sizeof(KEY_PAIR)*size); + key->keys = (KEY_PAIR**)realloc(key->keys,sizeof(KEY_PAIR *)*size); } key->size = size; } @@ -241,7 +241,7 @@ if(key != NULL) { if((idx >= 0) && (idx < key->size)) { - KEY_PAIR* pair = &key->keys[idx]; + KEY_PAIR* pair = (KEY_PAIR *)&key->keys[idx]; return pair->type; } else { @@ -266,7 +266,7 @@ if(key != NULL) { if((idx >= 0) && (idx < key->size)) { - KEY_PAIR* pair = &key->keys[idx]; + KEY_PAIR* pair = (KEY_PAIR *)&key->keys[idx]; if(pair != NULL) { return pair; } @@ -388,7 +388,7 @@ if(key->size > 0) { /* Memory leak in the making */ key->size--; - key->keys = (KEY_PAIR*)realloc(key->keys,sizeof(KEY_PAIR)*key->size); + key->keys = (KEY_PAIR**)realloc(key->keys,sizeof(KEY_PAIR *)*key->size); } else if(key->size == 0) { fprintf(stderr, @@ -416,7 +416,7 @@ if(key != NULL) { if((idx >= 0) && (idx < key->size)) { - KEY_PAIR* pair = &key->keys[idx]; + KEY_PAIR* pair = (KEY_PAIR *)&key->keys[idx]; pair->type++; } else { /J\ -- Jonathan Stowe | <http://www.gellyfish.com> | This space for rent |