realloc woes
John C. Lusth
jcl at bdrc.bd.com
Tue Apr 2 05:26:25 AEST 1991
I have a need to store some information in an array, but don't want to
have an arbitrary limit on the size of the array. I came up with the
following scheme to successively increase the size of the array as needed.
The code has been excerpted and edited; I hope I haven't introduced errors.
char **Strings;
if (i >= StringCount) { /* str is not already in the pool */
if (SlotsLeft <= 0) {
if (FirstTime) {
Strings = (char **) malloc(BankSize * sizeof(char *));
FirstTime = 0;
}
else
Strings = (char **) realloc(Strings, (i+BankSize) * sizeof(char *));
SlotsLeft = BankSize;
}
Strings[i] = str; /* here's where I trash somebody else */
++StringCount;
--SlotsLeft;
}
In the program I am working on, I have four arrays I expand this way.
Unfortunately, at one point in saving a string, I trash the memory
used by another expanding array. My questions are:
1) is there a better way to have arrays that can grow without bound?
2) if not, am I using realloc correctly? I suspect realloc is
the culprit because if I set BankSize high enough, the problem goes
away. BTW, in the actual code, I check the returns of malloc
and realloc.
3) if I am using realloc correctly, what's the best way for finding
out how I'm ending up with some shared memory locations?
I am running SUN OS 4.1.1 using cc.
john
--
John C. Lusth, Becton Dickinson Research Center, RTP, NC, jcl at bdrc.bd.com
More information about the Comp.lang.c
mailing list