这是我的函数,用于查找由void指针定位的2个集合数组的并集,我在运行第一部分时遇到问题,将Set A复制到union Set中,然后再与Set B进行比较
此时此代码的输出会生成示例 设置A = {1,5,7,8} Union Set = {8,8,8,8}复制Set A的最后一个元素4次 因为最后一个循环导致temp指针指向8。 我是否必须为每个循环创建一个新的int指针,或者有更好的方法来解决这个问题
//注意我不能使用矢量或排序方法,因为它不在我的学习范围内,所以我必须坚持原始的比较方式
//Definitions
// VoidPtr is Void*
// aSet is (VoidPtr *a = new VoidPtr[MAX])
// getElementI(aSet[i]) Returns an integer value at that position of the pointer
void findUnion(VoidPtr * aSet,VoidPtr * bSet,VoidPtr * unionSet,int sizea,int sizeb,int &sizec)
{
int* temp;
VoidPtr vp;
int notEqual = 0;
// Copy set a into set c
for(int i =0; i < sizea; i++)
{
*temp = getElementI(aSet[i]);
vp = temp;
unionSet[i] = vp;
}
}
答案 0 :(得分:0)
int* temp;
这里temp
是一个未经过启发的指针
*temp = getElementI(aSet[i]);
此处temp
被取消引用。取消引用未初始化的指针会导致程序崩溃(最多)和各种奇怪的行为(最坏的情况)。
我发现很难理解你真正需要做什么,但每次循环时分配一个新的int指针听起来很合理。喜欢这个
for(int i =0; i < sizea; i++)
{
int *temp = new int (getElementI(aSet[i]));
unionSet[i] = temp;
}
但我猜测。