我无法理解为什么以下代码不起作用:
#include <iostream>
#include <algorithm>
using namespace std;
#define maxelms 100
class IntSet{
public :
int n,*x;
public:
IntSet(){
x=new int[1+maxelms];
for (int i=0;i<maxelms;i++){
x[i]=0;
}
}
void insert()
{
for (int i=0;i<=maxelms;i++)
{
x[i]=rand()+RAND_MAX;
}
}
void Sort(){
sort(&x[0],&x[n]);
}
void print()
{
for (int i=0;i<n;i++){
cout<<x[i]<<" ";
delete[]x;
}
}
};
int main(){
IntSet b;
b.insert();
b.Sort();
b.print();
return 0;
}
请帮帮我。
答案 0 :(得分:2)
代码中有几个错误,例如:
delete[]x
的循环内调用x
- 将其移至之后。Sort
和print
依赖于从未初始化的班级成员n
。尝试调试和迭代,甚至尝试单元测试!
答案 1 :(得分:2)
1)您从未设置n
,但您尝试使用它。将构造函数更改为:
IntSet(){
x=new int[1+maxelms];
for (int i=0;i<maxelms;i++){
x[i]=0;
n = 1+maxelms;
}
2)在打印值的循环中,在仅打印一个元素后尝试删除数组,然后转到下一个元素。将print
更改为:
void print()
{
for (int i=0;i<n;i++){
cout<<x[i]<<" ";
}
delete[]x;
}
3)如果int
s,请不要使用动态分配的数组。请改用vector
。
答案 2 :(得分:1)
我有危险,它与此有关:
for (int i=0;i<n;i++){
cout<<x[i]<<" ";
delete[]x;
}
现在 - 这应该足以提示......
答案 3 :(得分:0)
IntSet(){
//add
n=maxelms;
//add destructor
~IntSet(){
delete[] x;//move to here
}