[lug] C questions.

George Sexton gsexton at mhsoftware.com
Thu Nov 18 10:01:37 MST 1999


>> 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





More information about the LUG mailing list