如何多次正确引用此指针?

时间:2018-01-27 07:41:27

标签: c++

这是我的函数,用于查找由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;
        }
}

1 个答案:

答案 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;
}

但我猜测