Thank you so much, that solved our problem! :D

On Sunday, May 14, 2017 at 4:06:12 PM UTC-4, Kale B wrote:
>
> There's a finalizer being set on `*gmp.Int` when `SetString()` is called. 
> Since `newnum` is a `gmp.Int` and not a `*gmp.Int` and `newnum` is copied 
> into `output_array`, the pointer with the finalizer set on it is no longer 
> referenced and the finalizer is eligible to be run when the next GC occurs.
>
> If you put a manual call to `runtime.GC()` in the loop the issue presents 
> itself much more quickly.
>
> The issue does not occur if you avoid copying `newnum` by storing pointers 
> in the slice. https://play.golang.org/p/l7kXpxArc1
>
> On Sun, May 14, 2017 at 12:20 PM, <[email protected] <javascript:>> 
> wrote:
>
>> Here is a test case below.
>>
>> In short, it's appending the same number to an array, but after 2500 
>> loops or so the value changes.
>>
>> package main
>> import (
>>     "fmt"
>>     "github.com/ncw/gmp"
>>     // "math/big"
>> )
>> func test_gmp_array() {
>>     index := 0
>>     output_array := []gmp.Int{}
>>     for index < 5000 {
>>         var newnum gmp.Int
>>         
>> newnum.SetString("27928410756179523138881080989986005991789933932188228018115755918494634799929873910027825747854697455979387110847058629350347288500624884424807086906801594642406392448568530327829083514883524712985492538589993807582131300292739787897589360129490451849769622648595726892334513355855504557741514903175075958458960111055024641406976670602678887952234068019841236549447926340755063903373950684252611325596552928912480285833159841819645546289989159869982214159616531691638376958340264087137749469269647555189450117026947774590910035240238694361652478067361121651905941283054193444516391789652433009672685099320489013369511",
>>  10)
>>         output_array = append(output_array, newnum)
>>         fmt.Println("array_size: ", len(output_array))
>>         fmt.Println(&output_array[0])
>>         index += 1
>>     }
>> }
>>
>> func main() {
>>     test_gmp_array();
>> }
>>
>>
>> On Sunday, May 14, 2017 at 7:53:51 AM UTC-4, Damian Gryski wrote:
>>>
>>>
>>>
>>> On Sunday, May 14, 2017 at 4:01:26 AM UTC+2, Elise Xue wrote:
>>>>
>>>> We're using gmp (library found at https://github.com/ncw/gmp) to run 
>>>> on large inputs, and we have arrays with thousands of elements at a time 
>>>> in 
>>>> our code. When we write these arrays to files, we find that the values of 
>>>> some of the elements have changed.
>>>>
>>>>
>>>> We tested our by code by reading in an input file of large numbers, 
>>>> casting them to gmp.Int, storing them in an array, and writing them to an 
>>>> output file. This works for an array of ~1400 numbers, but if the array 
>>>> gets any larger than that the values in the array change.
>>>>
>>>> Below we print the first element of our array each time a new element 
>>>> gets appended. As the size goes past 1435, the value of the first value 
>>>> changes, and it changes again when the size goes past 1437:
>>>>
>>>>
>>>>
>>> Can you provide example code that demonstrates the issue?
>>>
>>> Damian 
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to