std :: sort将数组指针设置为null

时间:2017-05-01 14:50:33

标签: c++ arrays sorting

我正在尝试使用std::sort函数对随机生成的数组进行排序,如下所示:

int *p = new int[n];

for (int i=0; i < n; ++i) {
    std::random_device r;

    std::default_random_engine e1(r());
    std::uniform_int_distribution<int> uniform_dist(1, 6);
    p[i]= uniform_dist(e1);

}

// Prints array (ok)
for (int i=0; i < n; ++i)
{
    std::cout << p[i] << ' ';
}
std::cout << std::endl;

// P != NULL at this point
std::sort(&p, &p + n);
// P == NULL at this point

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:4)

std::sort(&p, &p + n);

此行导致未定义的行为。 &p是本地p指针对象的地址,不是该对象指向的数组的位置。然后&p + n使用本地对象的地址执行非法指针算术。

你应该这样做:

std::sort(p, p + n);

当然,所有这一切最终都是徒劳的,因为你应该只使用std::vector,然后就变成了:

std::sort(begin(v), end(v));