Charles Greathouse on Sat, 16 Jun 2012 09:51:19 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: segfault on reading vector


> Can't reproduce this so far, and valgrind shows nothing suspicious :-(.

I could reproduce it at will on either of the versions mentioned on
that computer (Wndows Vista).  I cannot reproduce it on my Linux
system using version [2, 6, 0, "git-11f9ec7"].  I will try other
operating systems if I have a chance.

> 1) Why do you need to trap exceptions ?

I was cautious of division by 0.  I guess that can't happen in this
problem, can it.  In any case I wanted to leave it in, since it may be
a part of the bug.

> 2) A slightly more elegant ( and more than twice slower ) version

That is nicer.

Charles Greathouse
Analyst/Programmer
Case Western Reserve University

On Sat, Jun 16, 2012 at 3:28 AM, Karim Belabas
<Karim.Belabas@math.u-bordeaux1.fr> wrote:
> * Charles Greathouse [2012-06-15 16:29]:
>> I wrote a quick script to help someone with an "insert operators into
>> 123456789 to make 100" problem.  In essence, it was 9 nested loops
>> building a string with
>> if(trap(,0,eval(s9)==100),
>>       listput(v,s9)
>> )
>> inside, where v is a List.  At the end it returns Vec(v). The program
>> runs without problems, but when I try to access the return value I get
>> *** type: bug in PARI/GP (Segmentation Fault), please report
>> on both
>>           GP/PARI CALCULATOR Version 2.6.0 (development git-d1d257d)
>>            i686 running mingw (ix86/GMP-5.0.1 kernel) 32-bit version
>>                 compiled: May  9 2012, gcc version 4.6.3 (GCC)
>>                 (readline v6.2 enabled, extended help enabled)
>> and even on the old
>>          GP/PARI CALCULATOR Version 2.4.2 (development CHANGES-1.1971)
>>            i686 running cygwin (ix86/GMP-4.2.1 kernel) 32-bit version
>>  compiled: Dec 23 2007, gcc-3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
>>                  (readline v5.2 enabled, extended help enabled)
>>
>> I don't know why this is -- a general bug, a Windows-specific bug, or
>> a problem with my code. I tried it with iferr as well (only on 2.6.0)
>> with the same result.
>>
>> If I change the program to print the results and return a tally, it
>> works without difficulty.  The full code is
> [...]
>
> Can't reproduce this so far, and valgrind shows nothing suspicious :-(.
>
> Side notes :
> 1) Why do you need to trap exceptions ? Just removing op[n9] should do
> the trick
>
> 2) A slightly more elegant ( and more than twice slower ) version
>
>  test()={
>    my(op = ["","+","-","*","/"], v = List());
>    forvec(s = vector(9, i, [1,5]),
>      my(t);
>      t = Str(1, op[s[1]], 2, op[s[2]], 3, op[s[3]], 4, op[s[3]],
>              5, op[s[5]], 6, op[s[6]], 7, op[s[7]], 8, op[s[8]], 9);
>      if(eval(t) == 100, listput(v, t))
>    );
>    Vec(v)
>  };
>
>
> Cheers,
>
>    K.B.
>
>> test()={
>>       my(s1,s2,s3,s4,s5,s6,s7,s8,s9,op=["","+","-","*","/"],v=List());
>>       for(n1=1,5,
>>               s1=Str(1, op[n1]);
>>               for(n2=1,5,
>>                       s2=Str(s1, 2, op[n2]);
>>                       for(n3=1,5,
>>                               s3=Str(s2, 3, op[n3]);
>>                               for(n4=1,5,
>>                                       s4=Str(s3, 4, op[n4]);
>>                                       for(n5=1,5,
>>                                               s5=Str(s4, 5, op[n5]);
>>                                               for(n6=1,5,
>>                                                       s6=Str(s5, 6, op[n6]);
>>                                                       for(n7=1,5,
>>                                                               s7=Str(s6, 7, op[n7]);
>>                                                               for(n8=1,5,
>>                                                                       s8=Str(s7, 8, op[n8]);
>>                                                                       for(n9=1,5,
>>                                                                               s9=Str(s8, 9, op[n9]);
>>                                                                               if(trap(,0,eval(s9)==100),
>>                                                                                       listput(v,s9)
>>                                                                               )
>>                                                                       )
>>                                                               )
>>                                                       )
>>                                               )
>>                                       )
>>                               )
>>                       )
>>               )
>>       );
>>       Vec(v)
>> };
>>
>> (inelegant, but runs fast enough)
> --
> Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
> Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
> 351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~belabas/
> F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
> `
>