T
TwoFaze
Hallo Leute!
Lerne jetzt seiner einer Weile C/C++ und mache dementsprechend viele Übungen! Heute bin ich auf ein Problem gestoßen, bei welchem ich mir selbst mit meinen Kenntnissen nicht mehr helfen kann..darum bitte ich euch, was ist hier falsch? Beim ausführen erhalte ich die Fehlermeldung, dass ich auf den Speicher 0x000000.. zugreifen möchte und read nicht möglich ist! Ich kann mir schon vorstellen was das bedeutet, jedoch nicht wo ich den Fehler gemacht habe..ich hoffe auf Hilfe,
gruß TwoFaze!
Lerne jetzt seiner einer Weile C/C++ und mache dementsprechend viele Übungen! Heute bin ich auf ein Problem gestoßen, bei welchem ich mir selbst mit meinen Kenntnissen nicht mehr helfen kann..darum bitte ich euch, was ist hier falsch? Beim ausführen erhalte ich die Fehlermeldung, dass ich auf den Speicher 0x000000.. zugreifen möchte und read nicht möglich ist! Ich kann mir schon vorstellen was das bedeutet, jedoch nicht wo ich den Fehler gemacht habe..ich hoffe auf Hilfe,
gruß TwoFaze!
Code:
#include <iostream.h>
extern "C" int atoi(const char*);
extern "C" int rand();
int randint(int u){
int r = rand();
if (r < 0) r = -r;
return 1+r%u;
}
void error(const char *s){
cerr << "set: " << s << '\n';
//exit(1);
}
class intset{
int cursize, maxsize;
int *x;
public:
intset(int m, int n);
~intset();
int member(int t) const;
void insert(int t);
void start(int* i) const { i = 0; }
int ok(int& i) const { return i<cursize; }
int next(int& i) const { return x[i++]; }
};
void print_in_order(intset* set);
int main(int argc, char *argv[]){
if(argc!=3) error("two arguments expected");
int m = atoi(argv[1]);
int n = atoi(argv[2]);
intset s(m,n);
int count = 0;
while(count < m){
int t = randint(n);
if (s.member(t) == 0) {
s.insert(t);
count++;
}
}
print_in_order(&s);
return 0;
}
intset::intset(int m, int n){
if(m<1 || n<m) error("illegal intset size");
cursize = 0;
maxsize = m;
x = new int[maxsize];
}
intset::~intset(){
delete x;
}
void intset::insert(int t){
if(++cursize > maxsize) error("too may elements");
int i = cursize-1;
x[i] = t;
while(i>0 && x[i-1]>x[i]){
int t = x[i];
x[i] = x[i-1];
x[i-1] = t;
i--;
}
}
int intset::member(int t) const{
int l = 0;
int u = cursize-1;
while(l<=u){
int m = (1+u)/2;
if(t<x[m])
u = m-1;
else if(t>x[m])
l = m+1;
else
return 1;
}
return 0;
}
void print_in_order(intset* set){
int var;
set->start(&var);
while(set->ok(var))
cout << set->next(var) << '\n';
}