gpt4 book ai didi

c++ - std::vector 销毁抛出 sigabrt

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:32 26 4
gpt4 key购买 nike

我有一个 std::vector<double> GDB 在其中显示它包含这些值:

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

在函数退出时自动销毁时,它会抛出一个 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

这是怎么回事?

  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;
};

最佳答案

请确保 mydata.data.size() == mydata.t.size() * mydata.p.size()

您将 mydata.t.size() * mydata.p.size() 值赋给了一个包含 mydata.data.size() 元素的 vector 。这是一个数组绑定(bind)写入。

也许您应该试试 vector::push_back()。也就是说,

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);
}
}

关于c++ - std::vector<double> 销毁抛出 sigabrt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11674733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com