2018-05-17 7:03 GMT+02:00 Charles Cui <charles.cui1...@gmail.com>: > Hi Aleksander, > > I have the requirements to return a bytea array for some functions in > pg_thrift plugin. > What I did was similar to the following, > > bytea** ret = palloc(len * sizeof(bytea*)); > for (int i = 0; i < len; i++) { > // allocate space > ret[i] = palloc(size); > // fill in ret[i] > ... > } > PG_RETURN_POINTER(ret); > I can verify each ret[i] is correct by logging, but server crash when > executed PG_RETURN_POINTER(ret). > So, I am wondering what's the reason of the crash? > and what's the recommended way (best practice) to construct a return value > to be bytea array? >
You should to set a size of any varlena structure. check postgresql/src/backend/utils/adt/varlena.c code When I started with PostgreSQL hacking my often problem was memory allocation in bad (deallocated) context. Good to use own self compiled version of PostgreSQL configured with --enable-cassert option. Regards Pavel