Bonsoir,
j'ai rencontré cette erreur à l'éxecution avec GCC utilisé en mode terminal, ainsi qu'avec Project Builder. Voici le programme en question, après mise en place d'un garde-fou qui règle le problème. Si tu veux reproduire l'erreur, supprime les deux lignes suivantes :
qf=(float)p*(float)i;
if (qf>2147483647) break; // évite débordement de q si> 2^31-1.
-------------------------------------
/* Crible des nombres premiers */
#include <stdlib.h>
main()
{
char *n;
int nmax, i, p, q, c, t1, t2, lastprem;
float qf;
printf("valeur de n: \n");
scanf("%d",&nmax); /* instr pour entrer nmax */
n = (char*) malloc(sizeof(char)*nmax+1);
memset(n,1,sizeof(char)*nmax+1);
t1 = time(NULL);
for(p=2; p<= nmax; p++)
{
if (n[p]==0) continue;
for(i=p;i<=nmax; i++)
{
qf=(float)p*(float)i;
if (qf>2147483647) break; // évite débordement de q si> 2^31-1
q=p*i;
if (q>nmax) break;
n[q]=0;
}
}
t2 = time(NULL);
c=0; // init nécessaire à cause du tableau dynamique
for (i=1; i<=nmax; i++)
{
if (n==1)
{
c++;
lastprem=i;
}
}
printf("\n");
printf("%d nombres premiers trouves\n",c);
printf("Plus grand nombre premier trouve : %d\n",lastprem);
printf("temps: %d s\n",t2-t1);
return(0);
}