Hi Pierre,

Sorry for the late reply.

The code work now, thanks very much. But the programme crashes with a run-time error when the dimensions of the array are huge 500x500x500. This is probably due to the limitation of the 32 bit addrress space. Is there any other work around. I heard of creating arrays with strides and allocating them in different blocks of memory rather than in contiguos memory?

Thanks again

Jothy

On Wed, Aug 24, 2011 at 6:25 PM, Pierre-Andre Noel <noel.pierre.andre@gmail.com> wrote:
Yes, 500, 300 and 400 were the example dimensions you used in your earlier message.

Did you got it to work?

Pierre-André

PS: This email was not sent to the whole list.



On Wed, Aug 24, 2011 at 11:55 AM, Jothy <jothybasu@gmail.com> wrote:
You mean 500,300,400 are the required dimesnions and xDim,yDim,zDim are site_type parameters.

So the code should be like below I guess for an array of [x][y][z]


array_ref_type::size_type xDim(x), yDim(y), zDim(z);

  array_storage_type Storage(xDim*yDim*zDim);
  array_ref_type Array(&Storage.front(),boost::extents[xDim][yDim][zDim]);

Thanks

Jothy






On Wed, Aug 24, 2011 at 3:51 PM, Pierre-Andre Noel <noel.pierre.andre@gmail.com> wrote:
>> I am not familiar with multi_array, but it seems that you are creating a >1GB object on the stack. This will almost always crash. Try creating it on the heap instead. Be prepared for std::bad_alloc.

> But how to do this? I am new to c++.

I suggest you to either 1. read on the operators "new" and "delete" or 2. use a std::vector to allocate the memory then use a boost::multi_array_ref to refer to it. Here's an example:

#include <vector>
#include <boost/multi_array.hpp>

int main()
{
  typedef float data_type;
  typedef std::vector<data_type> array_storage_type;
  typedef boost::multi_array_ref<data_type,3> array_ref_type;

  array_ref_type::size_type xDim(500), yDim(300), zDim(400);
  array_storage_type Storage(xDim*yDim*zDim);
  array_ref_type Array(&Storage.front(),boost::extents[xDim][yDim][zDim]);
  // You may now use Array as usual.
}

Hope it helps,

Pierre-André Noël


On Wed, Aug 24, 2011 at 5:20 AM, Jothy <jothybasu@gmail.com> wrote:
Thanks for pointing this out.

But how to do this? I am new to c++.

Jothy


On Tue, Aug 23, 2011 at 10:42 PM, Juraj Ivančić <juraj.ivancic@gmail.com> wrote:
On 23.8.2011. 12:18, Jothy wrote:
Hi all,

I have just started to use boost libs. I am trying to create a large
float array (mandatory for my purpose). it works fine till certain
limit, but crashes above that. I think it about allocating memory in the
stack.

My code is like this

typedefboost::multi_array<float,3>array_type;
typedefarray_type::indexindex;
array_typeArray(boost::extents[xDim][yDim][zDim]);//500,300,400 for instance


Can some one help me to resolve this?

I am not familiar with multi_array, but it seems that you are creating a >1GB object on the stack. This will almost always crash. Try creating it on the heap instead. Be prepared for std::bad_alloc.

HTH


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users