From last weeks'
C course - a complete example showing dynamic memory allocation - reading in any file of data, lines of varying length, and packing them in neat. Source code
[here].
There's an issue with reading data of unknown size into a fixed declaration language like C... allocation stack memory isn't clever either, as it makes it impractical to pass data generated in one function on to its sibling - the data's lost on return to the parent so it doesn't have it to pass to the brother or sister.
Solution! - Allocate memory on the heap. You can do that for each record using
calloc. But that's not going to be the solution for the array of pointers to the records as we don't know how many of those there will be. We'll use
realloc which lets us allocate and then extend memory. The call's like this:
mydata = realloc(mydata,(nread+1) * sizeof(char *));
You'll note that the ingoing pointer (set to NULL before the very first call) is also set into the return variable - that way, the C function can shift the data around if it needs to, change the pointer, and return you a new address to an extended area or it can just return the same value if it's got enough free memory starting at the location passed in. It's really neat!
I'll show you this from first principles - help you to learn it -
on the course. (written 2013-06-30, updated 2013-07-15)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
C212 - C and C based languages - Memory Management [1497] Training Season Starts again! - (2008-01-07)
[1581] What is an lvalue? (Perl, C) - (2008-03-18)
[1589] Dynamic Memory Allocation in C - calloc, realloc - (2008-03-22)
[1670] Dynamic Memory Allocation in C - (2008-06-09)
[1845] Passing a table from Lua into C - (2008-10-18)
[2669] Efficient use of dynamic memory - C and realloc - (2010-03-10)
[2848] C course - final course example puts it all together - (2010-07-02)
[3118] Arrays of arrays - or 2D arrays. How to program tables. - (2011-01-02)
[3144] Setting up arrays in C - fixed size at compile time, or dynamic - (2011-01-24)
[3386] Adding the pieces together to make a complete language - C - (2011-08-11)
[3416] Storing Tcl source code encoded, and running via your own C program - (2011-09-02)
[4340] Simple C structs - building up to full, dynamic example - (2014-12-03)
[4634] Regression testing - via a very short C testing framework - (2016-01-29)
[4635] Encapsulating logic in functions and structs - the C approach to Object Oriented techniques - (2016-01-30)
C207 - C and C based languages - Pointers and references [1155] Pointers in C - (2007-04-19)
[1478] Some new C programming examples - files, structs, unions etc - (2007-12-19)
[2005] Variables and pointers and references - C and C++ - (2009-01-23)
[2572] The what and why of C pointers - (2010-01-13)
[2670] Pointers to Pointers to Pointers - what is the point? - (2010-03-10)
[3004] Increment operators for counting - Perl, PHP, C and others - (2010-10-18)
[3121] New year, new C Course - (2011-01-05)
[3238] Bradshaw, Ben and Bill. And some C and C++ pointers and references too. - (2011-04-09)
[3242] How to return 2 values from a function (C++ and C) - more uses of pointers - (2011-04-10)
[3399] From fish, loaves and apples to money, plastic cards and BACS (Perl references explained) - (2011-08-20)
[4560] Variables, Pointers and References - C and C++ - (2015-10-29)
Some other Articles
Using your own laptop on our courses - now even easier!West Coast (of Wales) - railway and stations in picturesSoft furnishings up a Welsh MountainSimple OO demonstration in C++, comparison to PythonAllocating memory dynamically in a static language like CExploring the area ... Ynys, near HarlechWhere are we now? On holiday!The first Luas of the morningChippenham - Melksham - Trowbridge bus changes next monthNew timetables from 28th July - bus routes 271 and 272