Q: Finden Sie alle Primzahlen zwischen zwei gegebenen Zahlen a und b, indem Sie verwenden.Wie verwendet man dynamische Arrays?
Ich verwende dynamisches Array, um Primzahlen zu speichern, aber es funktioniert nicht.
Nach dem Debuggen ist alles in Ordnung, bis die letzte printf()
, die abstürzt.
-Code
int main() {
int i, j, n, a, b, k;
int *tab;
scanf("%i", &n); // n is number of sets
for (i = 1; i <= n; i++){
scanf("%i %i", &a, &b);
tab = (int*) malloc(b * sizeof(int)); //allocating the memorry
for (j= 0; j < b; j++){ //seting all numbers to be prime
*(tab + j) = 1;
}
for (j = 2; j <= b; j++){
if (*(tab + j) == 1){
for(k = j; k <= b; k+=j)
*(tab + k) = 0; //seting 0 for all non prime numbers
}
}
for (j = a; j <= b; j++){
if (*(tab + j) == 1){
printf("%i", j); //printing prime numbers
}
}
free(tab);
}
return 0;
}
Ihr 'Tab' hat nur' b' Elemente. Dein Code greift bis zu "(b + 1) * (b + 1)" von ihnen. Das macht keinen Sinn. – melpomene
Sie greifen über den Bereich des Arrays hinaus. – BLUEPIXY
Bitte verwenden Sie nicht '* (tab + j)'. Verwenden Sie stattdessen 'tab [j]'. Es ist die geweihte Art des Zugriffs auf Array-Elemente. Es ist viel klarer und einfacher. – bolov