请大婶帮忙,如何解决析构函数时指针悬挂问题?
#include<iostream>#include<cstdlib>
using namespace std;
//int i = 1;
int cmp(const void *p, const void * q) {
return *(int *) p - *(int *) q;
}
class Set{
int *elem; //存放集合元素的指针
int count; //存放集合中的元素个数
public:
Set();
Set(int s[],int n);
~Set() {
cout << "XiGou" << endl;
//cout << "析构" << i++ << "次" << endl;
}
int find(int x) const; //判断x是否在集合中
Set operator+(const Set &); //集合的并集
//Set operator-(const Set &); //集合的差集
//Set operator*(const Set &); //集合的交集
void disp(); //输出集合元素
};
Set::Set() { };
Set::Set(int s[], int n) : elem(s), count(n) { } ;
int Set::find(int x) const {
for(int i = 0; i < count; ++i){
if(x == elem[i]){
return 1;
}
}
return 0;
}
void Set::disp() {
//cout << "The length of the ";
cout << "该集合的元素个数为:\t";
cout << count << endl;
cout << "其元素如下:";
qsort(elem, count, sizeof(int), cmp);
for(int j = 0; j < count; j++)
{
cout << elem[j] << " ";
}
cout << endl;
}
Set Set::operator + (const Set &A) {
Set temp;
temp = * this;
int i, l;
for(i = 0; i < A.count; ++i) {
l = find(A.elem[i]);
if(!l) {
temp.count++;
temp.elem[temp.count - 1] = A.elem[i];
}
}
return temp;
};
int main(){
Set A;
int b[] = {1, 3, 5, 6, 7}, b2[] = {2, 3, 6, 8, 7, 9};
Set a(b, 5), a2(b2, 6);
Set c;
c = a + a2;
c.disp();
return 0;
}
写了个集合的并集,可是用到析构函数时总会出错(指针悬挂),求大神帮忙! 如果我把析构函数注释掉,就可以,这又是什么情况,系统不是有默认析构函数吗,它不也一样执行析构函数?求解惑!谢谢!