Istnieją dwa pytania dotyczące kodu pisał poniżej:
1), gdy ten kod na CodeBlocks kod czasami z powodzeniem działa (powrót 0), ale zazwyczaj skutkuje błąd po tym, jak pokazuje wszystkie wyniki (zwracając -1073741819). Dlaczego tak jest?
2) Wszystkie wartości są prawidłowe, z wyjątkiem ostatniego elementu tablicy, w którym wartość powinna wynosić 1 (pTriangle [20] = 1). Jednak na końcu otrzymuję numer śmieci, co robię źle?
Zdałem sobie sprawę, że mogę osiągnąć ten sam wynik ze współczynnikami dwumianowymi, ale wciąż nie mam pojęcia, dlaczego otrzymuję błąd i byłoby najlepiej, gdyby mój błąd mógł zostać znaleziony.
Aktualizacja1:
pTriangle[i] = temp[i % 2 ? 0 : 1] + pTriangle[i];
wydaje się być problemem. Kiedy skomentowałem ten kod, program się nie zawiesił. Próbuję dowiedzieć się, dlaczego ulega awarii i próbuje znaleźć rozwiązanie wokół niego :)Tworzenie Pascala Trójkąt (niestabilny kod)
#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. Jest wcięty! –
Aha. Dziękuję :) – kpark