Boost logo

Boost Users :

Subject: Re: [Boost-users] Error (runtime) assigning multi_array to multi_array with smaller dimensions
From: Matheus Araújo Aguiar (matheus.pit_at_[hidden])
Date: 2009-05-21 19:46:22


Thanx for the reply Yung-Chin.

It compiles ok, what i get is a run time error. In a single main file, it
works fine too. But i had trouble when declaring the multi_array in the
header file, initializing it on the construtor and then trying to assign
first position to a one dimension array in one method.

It is something like this:

//class header file
boost::multi_array<char, 2> array2d;

//class cpp file
//at class constructor
array2d = boost::multi_array<char,2>(boost::extents[x][y]);

//at class method
boost::multi_array<char, 1> array1d = array2d[0];

then it compiles fine. But at runtime i get the error:
  Reference boost::detail::multi_array::value_accessor_n<T,
NumDims>::access(boost::type<Reference>, boost::multi_array_types::index,
TPtr, const boost::multi_array_types::size_type*, const
boost::multi_array_types::index*, const boost::multi_array_types::index*)
const [with Reference = boost::detail::multi_array::sub_array<char, 1u>,
TPtr = char*, T = char, unsigned int NumDims = 2u]: Assertion `size_type(idx
- index_bases[0]) < extents[0]' failed.

If you have an idea of what's going on, I'd be glad to know!

On Thu, May 21, 2009 at 6:22 PM, Oei, YC <oei.yungchin_at_[hidden]> wrote:

> > //at class constructor
> > boost::multi_array<char, 2> array2d = new boost::multi_array<char,
> > 2>(boost::extents[x][y]);
>
> > //at class method
> > boost::multi_array<char, 1> array1d = array2d[0];
>
> I tried out those two lines (minus the "new") here (see below), and
> they compile without complaints in g++ 4.1.2.
>
> Yung-Chin
>
>
>
> -- contents of test file --
>
> #include <iostream>
> #include <boost/multi_array.hpp>
>
> int main() {
> size_t x = 5;
> size_t y = 7;
>
> boost::multi_array<char, 2> array2d =
> boost::multi_array<char, 2>(boost::extents[x][y]);
> std::cout << array2d.num_dimensions() << std::endl;
> std::cout << array2d[0].num_dimensions() << std::endl;
>
> boost::multi_array<char, 1> array1d = array2d[0];
> std::cout << array1d.num_dimensions() << std::endl;
> return 0;
> } //main
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>

-- 
Matheus Araújo Aguiar
Computer Scientist
matheus.pit_at_[hidden]


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net