【发布时间】:2019-11-02 14:50:22
【问题描述】:
所以,我有一个大小为 3 的桶数组。声明为:
Bucket* bucket = new Bucket[size]();
我有一个函数可以打印出每个桶的地址:
printBucket(Bucket* tempBucket)
{
cout << "Address is:" << tempbucket << endl;
}
假设它输出(对于所有存储桶):
1st bucket address:015650DC
2nd bucket address:015650E8
3rd bucket address:015650F4
我想用第三个桶来改变第二个桶,所以我创建了这个函数:
Bucket* changeBucket(Bucket* buckets, int first, int second)
{
Bucket* temp = new Bucket();
temp = &buckets[first];
buckets[first] = buckets[second];
buckets[second] = *temp;
return buckets;
}
调用这个函数后,地址输出还是一样的:
1st bucket address:015650DC
2nd bucket address:015650E8
3rd bucket address:015650F4
我想要的输出是:
1st bucket address:015650DC
2nd bucket address:015650F4
3rd bucket address:015650E8
【问题讨论】:
-
你在
changeBucket的前两行中泄漏了内存。这不是 Java。你不必new一切。您还会丢失数组的真正第一个值,并复制第二个。 -
std::swap 可能是您要找的吗?
-
"我有一个大小为 3 的桶数组。声明为有一个大小为 3 的桶数组。声明为..." - 为什么?为什么不是
std::vector<Bucker> buckets(size)? -
另外,考虑到@WhozCraig 提出的观点,
Bucket复制构造函数/赋值运算符是什么样的? -
您想要的输出与数组的内容不一致。数组在内存中按顺序排列其内容。如果它有三个对象,则第二个的地址在第一个和第三个之间。总是。这就是数组的工作原理。所以你已经跳进了XY problem。您的真正目标是检查
changeBucket函数是否成功?如果是这样,您应该查看数组元素的内容,而不是地址。