|
| Hvad er der galt i følgende kode? Fra : Bjørn Petersen |
Dato : 07-12-01 20:14 |
|
Jeg får segmentationfejl nogle gange, jo større n er desto oftere sker det.
Ved n>400 er det stort set hver gang.
Hvad er fejlen?
Bjørn
_________________________________________________________-
#include "iostream.h"
#include "stdlib.h"
#include "time.h"
bool erDerAllerede(int, int*);
int main(int argc, char **argv) {
int n = 1;
int count = 0;
int *raekkefoelge = new int(n);
srand(time(NULL));
while (count < n) {
raekkefoelge[count] = rand()/1000%n+1;
if (!erDerAllerede(count, raekkefoelge)) {
count++;
}
}
for(int i=0; i<n; i++) {
cout << raekkefoelge[i] << endl << flush;
}
return 0;
}
bool erDerAllerede(int x, int *array) {
for(int i=0; i<x; i++) {
if (array[x] == array[i]) return true;
}
return false;
}
| |
Ivan Johansen (07-12-2001)
| Kommentar Fra : Ivan Johansen |
Dato : 07-12-01 21:02 |
|
Bjørn Petersen wrote:
> Jeg får segmentationfejl nogle gange, jo større n er desto oftere sker det.
> Ved n>400 er det stort set hver gang.
> Hvad er fejlen?
[snip]
> int *raekkefoelge = new int(n);
Her allokerer du en int og initialiserer den med værdien i n. Du mener
tilsyneladende et array med n elementer:
int *raekkefoelge = new int[n];
Husk at deallokere dit array igen, når du er færdig med at bruge det:
delete[] array;
Ivan Johansen
| |
Bjørn Petersen (07-12-2001)
| Kommentar Fra : Bjørn Petersen |
Dato : 07-12-01 21:06 |
|
Hmmm... jeg havne eller prøvet begge dele.
Det stod på begge måder i en bog jeg havde, men det lader til at virke nu!
Tak skal du have!
Bjørn
"Ivan Johansen" <NG@Padowan.dk> wrote in message
news:3C112036.10208@Padowan.dk...
> Bjørn Petersen wrote:
>
> > Jeg får segmentationfejl nogle gange, jo større n er desto oftere sker
det.
> > Ved n>400 er det stort set hver gang.
> > Hvad er fejlen?
>
>
> [snip]
>
> > int *raekkefoelge = new int(n);
>
> Her allokerer du en int og initialiserer den med værdien i n. Du mener
> tilsyneladende et array med n elementer:
> int *raekkefoelge = new int[n];
>
> Husk at deallokere dit array igen, når du er færdig med at bruge det:
> delete[] array;
>
> Ivan Johansen
>
| |
Morten Brix Pedersen (08-12-2001)
| Kommentar Fra : Morten Brix Pedersen |
Dato : 08-12-01 03:24 |
|
Da dit problem allerede er løst, har jeg kun et par kommentarer til koden.
Bjørn Petersen wrote:
> #include "iostream.h"
Du bør(skal) bruge #include <iostream>, det er en standard C++ header.
> #include "stdlib.h"
Du bør bruge #include <cstdlib>, det er en standard C++ header som
putter C Standard Library i std namespace.
> #include "time.h"
#include <ctime>
- Morten.
| |
Claus Jensen (09-12-2001)
| Kommentar Fra : Claus Jensen |
Dato : 09-12-01 16:40 |
|
Husk da også lige at skrive "using namespace std" efter dine include
sætninger. Ellers skal du skrive std::cout eller noget lignende hver gang du
vil bruge nogle kommandoer i std namespacet.
- Claus
"Morten Brix Pedersen" <morten@wtf.dk> skrev i en meddelelse
news:3C1179AD.20300@wtf.dk...
> Da dit problem allerede er løst, har jeg kun et par kommentarer til koden.
>
> Bjørn Petersen wrote:
>
> > #include "iostream.h"
>
>
> Du bør(skal) bruge #include <iostream>, det er en standard C++ header.
>
>
> > #include "stdlib.h"
>
>
> Du bør bruge #include <cstdlib>, det er en standard C++ header som
> putter C Standard Library i std namespace.
>
>
> > #include "time.h"
>
>
> #include <ctime>
>
> - Morten.
>
| |
Morten Brix Pedersen (09-12-2001)
| Kommentar Fra : Morten Brix Pedersen |
Dato : 09-12-01 20:44 |
|
Claus Jensen wrote:
> Husk da også lige at skrive "using namespace std" efter dine include
> sætninger. Ellers skal du skrive std::cout eller noget lignende hver gang du
> vil bruge nogle kommandoer i std namespacet.
Det er bedst hvis man prøver at undgå 'using namespace std', det
forurener dit namespace, og gør faktisk også compile tid langsommere.
Du bør hellere bruge 'using std::cout' o.s.v., til de ting du bruger ofte.
- Morten.
| |
|
|