我正在尝试使用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
你知道为什么会这样吗?
答案 0 :(得分:4)
std::sort(&p, &p + n);
此行导致未定义的行为。 &p
是本地p
指针对象的地址,不是该对象指向的数组的位置。然后&p + n
使用本地对象的地址执行非法指针算术。
你应该这样做:
std::sort(p, p + n);
当然,所有这一切最终都是徒劳的,因为你应该只使用std::vector
,然后就变成了:
std::sort(begin(v), end(v));