这是我查找由空指针定位的2个集合数组的并集的函数,在与集合B进行比较之前,我遇到了运行第一部分将集合A复制到并集的问题

现在,此代码的输出产生了示例
设置A = {1,5,7,8}
联合集= {8,8,8,8}复制集合A的最后一个元素4次
因为最后一个循环导致temp指针指向8。
我是否必须为每个循环创建一个新的int指针,还是有更好的解决方法

//注意,我不能使用 vector 或排序方法,因为它不在我的学习范围内,因此我必须坚持原始比较方法

//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;
        }
}

最佳答案

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

但是我在猜。

关于c++ - 如何多次正确引用此指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48473712/

10-11 23:07
查看更多