自己编写的动态数组的程序,刚学C++,程序质量自己都不敢恭维,但求大神帮忙看看错误,为什么编译连接都没错,运行不了呢???!!!急急急,万分感谢
#include <iostream>class
using namespace std;
class MYSET{
private:
double *elements;
int size;
int cardinal;
public:
MYSET(double *p = (double *)malloc(10 * sizeof(double)), int c = 0, int s = 10)
{
elements = p;
cardinal = c;
size = s;
cout<<"创建集合"<<"("<<cardinal<<"/"<<size<<")"<<endl;
}
~MYSET()
{
free(elements);
cout<<"销毁集合"<<"("<<cardinal<<")"<<endl;
}
int Cardinal()
{
return cardinal;
}
int IsEmpty()
{
if(cardinal != 0)
{
return 0;
}
else
{
return 1;
}
}
void Clear()
{
for(int i = 0; i <cardinal;i++)
{
Remove(elements[i]);
}
}
void Append(double s)
{
int i = 0;
while(i < cardinal && elements[i] != s)
{
i++;
}
if(i >= cardinal)
{
elements[cardinal] = s;
cardinal++;
}
if(cardinal >size)
{
size += 10;
}
}
void Remove(double m)
{
int i = 0, j;
while(i < cardinal && elements[i] != m)
{
i++;
}
if(i < cardinal)
{
for(j = i; j < cardinal - 1; j++)
{
elements[j] = elements[j+1];
cardinal--;
}
}
}
int Exist(double n)
{
int i = 0;
while(i < cardinal && elements[i] != n)
{
i++;
}
if(i < cardinal)
{
return 1;
}
else
{
return 0;
}
}
void Input()
{
while(getchar() != '\n')
{
cin>>elements[cardinal];
cardinal++;
}
}
void Output()
{
int i;
cout<<"{";
if(IsEmpty())
{
cout<<" }";
}
else
{
for(i = 0; i < cardinal - 1; i++)
{
cout<<elements[i]<<", ";
}
cout<<elements[cardinal - 1]<<"}";
}
}
};
int main()
{
/*MYSET a; // 创建空集(动态数组尺寸起始值为10)
double p[4] = { 3.5, 6.8, 4.7, 6.8 };
MYSET b(p, 4); // 创建含有4个元素3.5, 6.8, 4.7,6.8的集合
cout << "a的基数 = " << a.Cardinal() << endl;
cout << "b的基数 = " << b.Cardinal() << endl;
if (a.IsEmpty()) cout << "a是空集\n";
else cout << "a是非空集\n";
if (b.IsEmpty()) cout << "b是空集\n";
else cout << "b是非空集\n";
cout << "a = "; a.Output(); cout << endl;
cout << "b = "; b.Output(); cout << endl;*/
MYSET a; // 创建空集(动态数组尺寸起始值为10)
cout << "a = ? "; a.Input();
cout << "a = "; a.Output(); cout << endl;
a.Clear(); // 置空集
cout << "a = "; a.Output(); cout << endl;
a.Append(3.5); // 添加元素
a.Append(6.8); a.Append(4.7);
cout << "a = "; a.Output(); cout << endl;
a.Append(6.8); // 数据重复, 不添加
cout << "a = "; a.Output(); cout << endl;
a.Remove(6.8); // 删除元素
cout << "a = "; a.Output(); cout << endl;
a.Remove(6.8); // 无此无素, 不删除
cout << "a = "; a.Output(); cout << endl;
if (a.Exist(4.7)) cout << "有此元素\n";
else cout << "无此元素\n";
if (a.Exist(6.8)) cout << "有此元素\n";
else cout << "无此元素\n";
a.Append(9.8); a.Append(2.1); a.Append(3.2); a.Append(4.4);
a.Append(7.2); a.Append(5.8); a.Append(8.3); a.Append(5.1);
cout << "集合基数: " << a.Cardinal() << endl;
a.Append(0.3); // 动态数组已满, 先将数组尺寸扩大10到20, 再添加元素
cout << "集合基数: " << a.Cardinal() << endl;
a.Append(2.8); a.Append(8.8); a.Append(4.6); a.Append(0.8);
a.Append(6.5); a.Append(3.7); a.Append(6.2); a.Append(9.1);
a.Append(5.4); a.Append(0.5); a.Append(6.9); a.Append(9.3);
cout << "集合基数: " << a.Cardinal() << endl;
return 0;
}
C++ 数组
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。