Malcolm Kay wrote:
On Friday 07 May 2004 06:42, Henrik W Lund wrote:
....

malloc() is your friend! :-)

--> double *ncost = malloc(sizeof (double) * persons * scens); <--

This ought to do the trick. Just remember to make sure that malloc
returns a valid pointer, otherwise you'll have another seg fault.

I'm pretty sure you can adress the pointer like you do with the array
there (ncost[persons][0], etc...); if not, you can always do
ncost(sizeof(double) * persons + 0), etc...

/* AMENDMENT!!! */
In my haste, I totally forgot my pointer dereferencing. The correct way
to reference a pointer as a two dimensional array is, of course, thus:

*(ncost + (sizeof(double) * persons) + 0)) = 0.00;


You've still got it wrong!
ncost increments in units of size equal to that which it points
so it should be:
  *(ncost + person*scens + scen)
where person is the first index and scen the second.
or in the particular instance
  *(ncost + person*scens + 0) = 0.00;

For easier to read code it would be better to use:
   double (*ncost)[scens] = malloc( persons * sizeof *ncost );

and dereference as:
   ncost[person][scen]

or in particular
   ncost[person][0] = 0.0;

And for the OP it is usual to write constants generated
with #define in upper-case. It generally seems to help
to make the code easier to follow. In this case:
 PERSONS instead of persons
and
 SCENS instead of scens

This also make the distinction between PERSONS and person
more evident while retaining their implied connection.

Malcolm



Thank you for the rectification. While the code did compile and run fine the way I wrote it, I suppose that's just lucky. I guess stuff like this is the reason why some of my C/C++ programs seg fault on rare occasions. ;-)


I generally handle pointers well, but evidently not perfectlu well. :-D

-Henrik W Lund
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to