Ci sono due domande riguardanti il codice pubblicato di seguito:
1) Quando ho eseguito questo codice sul CodeBlocks, il codice viene eseguito a volte con successo (ritorno 0), ma di solito si traduce in un errore dopo che mostra tutti i risultati (restituendo -1073741819). Perché è così?
2) I valori sono tutti corretti tranne l'ultimo elemento dell'array in cui il valore deve essere 1 (pTriangle [20] = 1). Tuttavia, alla fine ottengo del numero di rifiuti, cosa sto sbagliando?
Ho capito che potrei arrivare allo stesso risultato con coefficienti binomiali ma non ho ancora idea del motivo per cui sto ricevendo l'errore e sarebbe meglio se il mio errore fosse trovato.
Update1:
pTriangle[i] = temp[i % 2 ? 0 : 1] + pTriangle[i];
sembra essere il problema. Quando ho commentato questo codice, il programma non si è bloccato. Sto cercando di scoprire il motivo per cui si blocca e cercando di trovare una soluzione intorno ad esso :)Creazione Triangolo di Pascal (codice instabile)
#include <stdio.h>
#include <stdlib.h>
#define LEVEL 20
int main()
{
int *pTriangle = (int*)malloc(sizeof(int)*(LEVEL+1));
int i;
for (i = 0; i < LEVEL; i++)
pTriangle[i] = 0;
createPascalTriangle(pTriangle, LEVEL);
for(i = 0; i < LEVEL+1; i++)
printf("pTriangle[%d]: %d\n", i, pTriangle[i]);
free(pTriangle);
return 0;
}
int createPascalTriangle(int *pTriangle, int level){
if (level <= 0)
return 0;
pTriangle[0] = 1;
pTriangle[1] = 1;
int i;
for (i = 2; i <= level; i++)
increasePascalTriangleOneLevel(pTriangle);
return 1;
}
int increasePascalTriangleOneLevel(int *pTriangle){
int i = 1;
int temp[2] = {0};
temp[0] = pTriangle[0];
while (pTriangle[i] != 0){
temp[i % 2] = pTriangle[i];
pTriangle[i] = temp[i % 2 ? 0 : 1] + pTriangle[i];
i++;
}
pTriangle[i] = 1;
return 1;
}
Wow. È rientrato! –
Aha. Grazie :) – kpark