Joh*_*hnC 1 c++ sorting vector
经过多次搜索,似乎指向向量的指针不是最好的事情.但是,以下代码对我造成了太多错误:
1 #include <stdio.h>
2 #include <algorithm>
3 #include <vector>
4
5
6 class Hdr
7 {
8 public:
9 std::vector<long> *order;
10 bool operator()(long i1, long i2) const;
11 Hdr(int N);
12 ~Hdr();
13 };
14
15 Hdr::Hdr(int N)
16 {
17 order = new std::vector<long>(N,0);
18 for(int k=0;k<N;k++) (*order)[k] = -k;
19 };
20
21 Hdr::~Hdr()
22 {
23 order->clear();
24 delete order;
25 };
26
27 bool Hdr::operator()(long i1, long i2) const
28 {
29 return (i1<i2);
30 };
31
32 int main(void)
33 {
34 Hdr mhdr(1000);
35 std::sort(mhdr.order->begin(),mhdr.order->end(),mhdr);
36
37 printf("value at 300 = %d\n",mhdr.order->at(300));
38 };
Run Code Online (Sandbox Code Playgroud)
在Linux上使用gcc 4.3,可执行文件提供"双重免费或损坏".所以我注释了第24行,它抛出'std :: out_of_range'.显然,当动态分配的向量传递给std :: sort时,第35行(sort)会混淆一切.或者我在某个地方遇到了一个大错.请帮忙!!如果我将第9行更改为std :: vector order,那么事情似乎很好; 但是我不禁想知道向量指针出了什么问题.
你将mhdr值传递给std::sort(),使用一个默认的复制构造函数复制指向你的向量的指针,并delete在该实例超出范围时使用它.那不是你想要的.
您可能应该使用与持有该向量的东西不同的比较器对象,或者引用计数指向向量的指针(可能使用适当的智能指针类).