On 11/25/22 21:43, Laryssa Abdala wrote:

I am trying to create a function that returns an ArrayView to a Tensor, like 
this:
constArrayView<constTensor<1, spacedim>> function{
return make_array_view(table, row, start_col, size_view;
}
This gives me a segmentation fault.

I looked through some of the ArrayView tests and at the function get_properties() defined on line 53 <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.dealii.org%2F9.2.0%2Fdoxygen%2Fdeal.II%2Fproperty__pool_8cc_source.html%23l00053&data=05%7C01%7CWolfgang.Bangerth%40colostate.edu%7C07cbb55748af4f7dcbef08dacf68d26a%7Cafb58802ff7a4bb1ab21367ff2ecfc8b%7C0%7C0%7C638050346380857335%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=ST3HnEXnZ4uXWSy342c5BlBzq039QDmtYs7mh46rIZM%3D&reserved=0> of file property_pool.cc <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.dealii.org%2F9.2.0%2Fdoxygen%2Fdeal.II%2Fproperty__pool_8cc_source.html&data=05%7C01%7CWolfgang.Bangerth%40colostate.edu%7C07cbb55748af4f7dcbef08dacf68d26a%7Cafb58802ff7a4bb1ab21367ff2ecfc8b%7C0%7C0%7C638050346380857335%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=UZ3%2FkbauY%2FRhaYsqnSGyvngQCneBxPupg0u8Dg2UEz0%3D&reserved=0>, which helped me understand the pointer-like-nature of ArrayView. However, none of them seem to allocate dynamic memory for the ArrayView object before returning it. Should I allocate dynamic memory to avoid the segfault? If so, how?


Laryssa,
start by explaining *what* it is you are trying to achieve, and then we can see *how* to do it.

ArrayView only presents a view on an existing array that lives somewhere in memory. But as long as you want to access that view, the underlying array must continue to exist or you will get errors such as what you see. As a consequence, a function must not return an ArrayView to an object that lives only in that function (i.e., a local variable). I suspect that is what is happening in your case, but since I don't know the code, I cannot say for sure. As for how you should allocate the memory -- that comes back to *what* you want to do, which I also don't know :-)

Best
 W.

--
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 [email protected]
                           www: http://www.math.colostate.edu/~bangerth/


--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/b95e2d2e-9d96-16d7-c8e6-79fe57e825ce%40colostate.edu.

Reply via email to