Взгляните на эту часть l oop:
for (int i = 0; i < num; i++)
{
p1 = p1 + i; // <--- Here
Здесь, я полагаю, что вы намеревались сказать «сделать p1
точку i
шагов после начала массив, на который он указывает. " Однако то, что вы написали здесь, не делает этого. В частности:
- На первой итерации это 0 шагов после начала.
- На второй итерации 0 + 1 = 1 шаг после начала.
- На третьей итерации 0 + 1 + 2 = 3 шага после начала.
- На четвертой итерации 0 + 1 + 2 + 3 = 6 шагов после начала.
В конце концов, это приведет к выходу за пределы конца вашего массива, что может быть непосредственной причиной вашего cra * sh.
Чтобы исправить это, вместо перемещения указателя вперед, рассмотрите используя индексирование массива:
for (int i = 0; i < num; i++)
{
p1[i] = i + 1;
factorial *= p1[i];
}
Или, если вы хотите использовать указатели, создайте отдельный указатель:
for (int i = 0; i < num; i++)
{
int* p2 = p1 + i;
*p2 = i + 1;
factorial *= (*p2);
}
Надеюсь, это поможет!