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] > ` >