[lug] C questions.
Stephen G. Smith
stephens at nsrfc.com
Thu Nov 18 10:36:57 MST 1999
try
www.itlibrary.com
or
www.itknowledge.com
-----Original Message-----
From: George Sexton
To: lug at lug.boulder.co.us
Sent: 11/18/99 10:01 AM
Subject: RE: [lug] C questions.
>> 1) I once found, but now lost, a web page containing the
documentation
>> for all the gcc/egcs functions. Anybody have a good reference site
or
>> book they love? Already have K&R, was wanting something a bit more
>> modern, advanced, and comprehensive. I'd absolutely love a good
"tips
P.J. Plauger's Book the Standard C Library is a good reference to have.
If
you are interested in portable code, it is indispensable.
>> 2) I need to try to do some dynamic memory allocation. I'd like to
find
>> a brief explanation of how it should be done, or better yet some
example
>> code somewhere? Basically, I need to find the nonzero indeces of a
>> _HUGE_ (like more than millions of entries) sparse matrix. All I'm
>> doing is growing a two dimensional array which will have the row and
>> column indices of said entries, but I have no idea how many I have
until
>> I find them! It seems inefficient to call realloc every time I find
a
Well, a linked list would be one approach but it would be pretty
wasteful in
terms of memory consumption. Perhaps something like:
#define MAX_NODECOUNT 1024
typedef struct MyStruct {
int index[MAX_NODECOUNT];
int useCount;
struct MyStruct *pNext;
} MYSTRUCT;
the basic idea would be to allocate a linked list and each node contains
1024 indices. Pseudo code would look something like
MYSTRUCT *pCurrent, *pHead;
pCurrent=pHead=calloc(sizeof struc MyStruct,1);
if (this is one we care about)
{
if (pCurrent->useCount==MAX_NODECOUNT) {
pCurrent->pNext=calloc(sizeof struct MyStruct,1);
memset(pNext,0x00,sizeof struct MyStruct);
pCurrent=pCurrent->pNext;
}
pCurrent->index[pCurrent->useCount++]=Index #;
}
Finding the items now becomes:
pCurrent=pHead;
while (pCurrent) {
for (i=0; i < pCurrent->useCount; i++) {
index=pCurrent[i];
perform processing....
}
pCurrent=pCurrent->pNext;
}
Deallocating memory, etc is left as an exercise for the reader...
George Sexton
MH Software, Inc.
Voice: 303 438 9585
Fax: 303 469 9679
URL: http://www.mhsoftware.com
_______________________________________________
Web Page: http://lug.boulder.co.us
Mailing List: http://lists.lug.boulder.co.us/mailman/listinfo/lug
More information about the LUG
mailing list