Hallo, voor school zijn we bezig met behulp van de zeef van eratosthenes priemgetallen te berekenen, ik ben op deze methode al geraakt tot 450.000.000 en ben daarna beginnen zoeken waar m'n programma beter kon, nu zit ik echter met een fout ergens in de malloc, als m'n zeef in de duizendtallen zit.
Kan iemand zeggen wat er fout gaat, of evt goede tips geven zodat m'n zeef nog hogere getallen kan berekenen, geen andere methode dus!
Hopelijk is m'n programmeerstijl duidelijk.
First-chance exception at 0x008d10e2 in Priem.exe: 0xC0000005: Access violation writing location 0x00899000.
Unhandled exception at 0x008d10e2 in Priem.exe: 0xC0000005: Access violation writing location 0x00899000.
Kan iemand zeggen wat er fout gaat, of evt goede tips geven zodat m'n zeef nog hogere getallen kan berekenen, geen andere methode dus!
Hopelijk is m'n programmeerstijl duidelijk.
First-chance exception at 0x008d10e2 in Priem.exe: 0xC0000005: Access violation writing location 0x00899000.
Unhandled exception at 0x008d10e2 in Priem.exe: 0xC0000005: Access violation writing location 0x00899000.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| // Priem.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
void Zeef(int intBovengrens, int *arrayGetallen);
int _tmain(int argc, _TCHAR* argv[])
{
int intMaxzeef = 0;
printf("Priemgetallen berekenen met behulp van de zeef van Eratosthenes \n");
printf("Geef de bovengrens in: \n");
scanf("%d", &intMaxzeef);
//Geheugen reserveren
int *arraymalloc = (int*)malloc(intMaxzeef*sizeof(int));
if( arraymalloc == NULL )
{
printf( "Niet genoeg geheugen beschikbaar \n" );
}
else
{
printf( "Geheugen gereserveerd \n \n" );
}
//Zeef oproepen
Zeef(intMaxzeef, arraymalloc);
//Geheugen vrijgeven
free(arraymalloc);
printf("\n");
printf( "Geheugen gewist \n" );
return 0;
}
//Vanaf hier komen de functies
void Zeef(int intBovengrens, int *arrayGetallen)
{
int intLoopgetallen=0 , intVeelvoudenschrapper=0 , intVeelvoud=0;
// array opvullen tot bovengrens
for(intLoopgetallen=0; intLoopgetallen<intBovengrens; intLoopgetallen++)
{
arrayGetallen[intLoopgetallen]=intLoopgetallen;
}
intLoopgetallen = 0;
// array leegmaken
for(intLoopgetallen=0; intLoopgetallen<intBovengrens; intLoopgetallen++)
{
//Getallen 0 en 1 schrappen
if (intLoopgetallen<2)
{
arrayGetallen[intLoopgetallen]=0;
}
//Veelvouden schrappen
else
{
for(intVeelvoudenschrapper=2; intVeelvoud<intBovengrens; intVeelvoudenschrapper++)
{
intVeelvoud=intLoopgetallen*intVeelvoudenschrapper;
arrayGetallen[intVeelvoud]=0;
}
intVeelvoud=0;
}
//zeef weergeven op het scherm
if (arrayGetallen[intLoopgetallen] != 0)
{
printf("%d\t", arrayGetallen[intLoopgetallen]);
}
else
{
printf("\t");
}
}
} |