Gregor Trefs <gregor.trefs@delphit.com> writes:
> I developed a C function which returns a record. The record contains 3 scalar values and 2 arrays. Randomly some
recordelements are null and I wonder why. I could trace down the problem to the point where the return record is
created.Until this point everything is computed correctly. Below you see an excerpt of the relevant code. I use
PostGres8.4 on Ubuntu 10.10 (x64).
You're not bothering to fill in the nulls[] array:
> // Allocate enough memory for nulls
> nulls = palloc(tuplen * sizeof (bool));
> // Create tuple
> res_tuple = heap_form_tuple(tupdesc, values, nulls);
palloc0 would work better here.
BTW, it's a good idea to develop/test C code in a backend built with
--enable-debug --enable-cassert. Had you been doing so, palloc would
have given you back intentionally-garbage-filled memory, and you'd have
noticed the mistake immediately.
regards, tom lane