core.stdc.stdlib._compare_fp_t and qsort
Joe
jma at freedomcircle.com
Sun Mar 18 16:45:16 UTC 2018
On Sunday, 18 March 2018 at 13:10:08 UTC, Dmitry Olshansky wrote:
> Do this to get the usual ptr + length:
>
> sort!((a, b) => to!string((*a).name) <
> to!string((*b).name))(recs[]);
>
> Also to!string would be computed on each compare anew. May want
> to use schwartzSort to avoid that, on 10 elements there is no
> real difference though.
The 10 elements are just because it's a small test program.
What does changing "recs" to "recs[]" as the argument actually
do? Does it duplicate the fixed array on the fly? [I guess I
have to study more!]
The change does pass the compiler, but at runtime it causes a
segfault. The next to last frame in the backtrace shows (having
changed from to!string to fromStringz and using a string template
instead of a lambda):
#6 0x0000555555565760 in
std.algorithm.sorting.sort!("fromStringz((*a).name.ptr) <
fromStringz((*b).name.ptr)", 0,
testd.Record*[]).sort(testd.Record*[]) (r=...)
Then it goes through quickSortImpl, shortSort and sort5, moving
on to either std.functional.binaryFun or processing of the
lambda, with a and b equal to 0, ending with a segfault in a ??
call from fromStringz or in memcpy called from object._dup (in
the to!string case).
More information about the Digitalmars-d-learn
mailing list