I have a std::vector<double>
In which GDB shows it containing these values:
Wph <5 items> vector<double>
[0] 10.750281685547618 double
[1] 0.0053087812248281997 double
[2] 4.2807534148705719e-08 double
[3] 5.7427427663508097e-07 double
[4] 0 double
Upon automatic destruction when the function is exiting, it throws a SIGABRT.
0 raise raise.c 64 0x7fffeec5ad05
1 abort abort.c 92 0x7fffeec5eab6
2 __libc_message libc_fatal.c 189 0x7fffeec93d7b
3 malloc_printerr malloc.c 6283 0x7fffeec9fa8f
4 _int_free malloc.c 4795 0x7fffeec9fa8f
5 __libc_free malloc.c 3738 0x7fffeeca38e3
6 __gnu_cxx::new_allocator<double>::deallocate new_allocator.h 95 0x457828
7 std::_Vector_base<double, std::allocator<double> >::_M_deallocate stl_vector.h 146 0x45567e
8 std::_Vector_base<double, std::allocator<double> >::~_Vector_base stl_vector.h 132 0x4542b3
9 std::vector<double, std::allocator<double> >::~vector stl_vector.h 314 0x453a96
What's going on?
int data = 0;
vector<double> Wph;
Wph.resize(mydata.data.size());
for (size_t t = 0; t < mydata.t.size(); t++)
{
double t0 = (PI / 180.0) * mydata.t[i];
for (size_t p = 0; p < mydata.p.size(); p++)
{
double _Wph = 5; //arbitrary math
Wph[data] = _Wph;
data++;
}
}
struct mydata
{
vector<double> t, p;
vector<point> data;
};
Please make sure mydata.data.size() == mydata.t.size() * mydata.p.size()
.
You assigned mydata.t.size() * mydata.p.size()
values into a vector with mydata.data.size()
elements. That's an array bound write.
Maybe you should try vector::push_back()
instead. That is,
vector<double> Wph;
for (size_t t = 0; t < mydata.t.size(); t++)
{
double t0 = (PI / 180.0) * mydata.t[i];
for (size_t p = 0; p < mydata.p.size(); p++)
{
double _Wph = 5; //arbitrary math
Wph.push_back(_Wph);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With