C - tablica dynamiczna

0

Cześć, próbuje zrobić program, który wyszukuje liczby pierwsze w podanym przedziale sitem Eratostenesa. Zrobiłem to na normalnej tablicy, ale w zadaniu musi być użyta tablica dynamiczna. Spróbowałem tak to zrobić, działa, ale wyskakuje jakiś błąd, prawdopodobnie związany z pamięcią, ale nie wiem z czego wynika i nie umiem się tego dopatrzeć. Z góry dziękuję za pomoc ```c

#include "pch.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>


int main()
{
	int a, b, limit, i, j;
	printf("Podaj przedzial\n");
	scanf_s("%d", &a);
	scanf_s("%d", &b);
	int *tablica = (int*)malloc(b*sizeof(int));
	limit = floor(sqrt(b));
	//inicjuj tablice
	for (i = 1, j = a ; i <= b; i++, j++) tablica[i] = j;
	//algorytm - sito eratostenesa
	for (i = 2; i <= limit; i++)
	{
		if (tablica[i] != -1)
		{
			j = i + i;
			while (j <= b)
			{
				tablica[j] = -1;
				j += i;
			}
		}
	}
	//wypisz wynik
	printf("Liczby pierwsze z zakresu od %d do %d\n\n", a, b);
	for (i = a; i <= b; i++) if (tablica[i] != -1) printf("%d, ", i);
	free(tablica);
	return 0;
}
1
for (i = 1, j = a ; i <= b; i++, j++) tablica[i] = j;

Masz UB, tablice są indeksowane od zera.

0

A podasz nam ten blad? :) Wiekszosc pewnie nie ma jak tego skompilowac bo uzywasz gowno funkcji z M$

0

HEAP CORRUPTION DETECTED

0

Jakie wpisujesz przedziały?

0
#include "pch.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>


int main()
{
	int a, b, limit, i, j;
	printf("Podaj przedzial\n");
	scanf_s("%d", &a);
	scanf_s("%d", &b);
	int *tablica = (int*)malloc(b*sizeof(int));
	limit = floor(sqrt(b));
	//inicjuj tablice
	for (i = 0, j = a ; i <= b; i++, j++) tablica[i] = j;
	//algorytm - sito eratostenesa
	for (i = 2; i <= limit; i++)
	{
		if (tablica[i] != -1)
		{
			j = i + i;
			while (j <= b)
			{
				tablica[j] = -1;
				j += i;
			}
		}
	}
	//wypisz wynik
	printf("Liczby pierwsze z zakresu od %d do %d\n\n", a, b);
	for (i = a; i <= b; i++) if (tablica[i] != -1) printf("%d, ", i);
	free(tablica);
	return 0;
}
1

Nadal masz off-by-one: while (j <= b), i <= b;

1 użytkowników online, w tym zalogowanych: 0, gości: 1