Changeset 2282


Ignore:
Timestamp:
Feb 9, 2012 10:29:05 AM (8 years ago)
Author:
bradbell
Message:

Fix bug in Base types where each element allocates memory.

pod_vector.hpp: fix bug when extending base types.
base_alloc.cpp: fix missing copy constructor (bug to use default).

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/cppad/local/pod_vector.hpp

    r2082 r2282  
    44
    55/* --------------------------------------------------------------------------
    6 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-11 Bradley M. Bell
     6CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-12 Bradley M. Bell
    77
    88CppAD is distributed under multiple licenses. This distribution is under
     
    166166                        if( ! is_pod<Type>() )
    167167                        {       for(i = 0; i < old_capacity; i++)
    168                                         (data_ + i)->~Type();
     168                                        (old_data + i)->~Type();
    169169                        }
    170170                        thread_alloc::return_memory(v_ptr);
  • trunk/omh/whats_new_12.omh

    r2281 r2282  
    3636
    3737$head 02-09$$
     38$list number$$
    3839Add the $icode set_static$$ to $cref memory_leak$$.
    39 This is a precursor to testing base types that allocate memory
     40This is necessary for testing base types that allocate memory
    4041for each element.
     42$lnext
     43Fix memory allocation bug in $code cppad/local/pod_vector.hpp$$
     44when each element of the $cref/Base/base_require/$$ type allocated memory.
     45$lend
    4146
    4247$head 01-30$$
  • trunk/test_more/base_alloc.cpp

    r2281 r2282  
    5151                        ptrdbl_  = static_cast<double*>(v);
    5252                        *ptrdbl_ = dbl;
     53                }
     54                my_base(const my_base& x)
     55                {       size_t cap;
     56                        void *v  = thread_alloc::get_memory(sizeof(double), cap);
     57                        ptrdbl_  = static_cast<double*>(v);
     58                        *ptrdbl_ = *x.ptrdbl_;
    5359                }
    5460                ~my_base(void)
     
    161167
    162168        // y = x^2
    163         CppAD::vector<my_ad>   a_x(1), a_y(1);
     169        CppAD::vector<my_ad>   a_x, a_y;
     170        a_x.resize(1);
    164171        a_x[0] = my_ad(1.);
    165172        CppAD::Independent(a_x);
     173        a_y.resize(1);
    166174        a_y[0] = a_x[0];
     175
     176        // create a new parameter for each iteration of this loop
     177        size_t i, N = 50;
     178        for(i = 0; i < N; i++)
     179                a_y[0] += double(i);
     180               
    167181        CppAD::ADFun<my_base> f(a_x, a_y);
    168182
Note: See TracChangeset for help on using the changeset viewer.