|
Boost Users : |
Subject: Re: [Boost-users] multi_array with large dimensions crashes
From: Jothy (jothybasu_at_[hidden])
Date: 2011-08-24 11:55:37
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_at_[hidden]> 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_at_[hidden]> 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_at_[hidden]>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_at_[hidden]
>>> http://lists.boost.org/**mailman/listinfo.cgi/boost-**users
>>>
>>
>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
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