这是我查找由空指针定位的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/