Calcular factores primos de un numero

Este programa es variación de Saber si un numero es primo y Calculando números primos y como dice en el titulo se encarga de calcular los factores primos de un numero. Por razones desconocidas falla algunas veces, no con determinados números sino de forma aleatoria, todavia no se que es lo que lo causa.

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
start:
    cout << endl << endl;
    unsigned int x,a, i = 3, j, n = 2, d,max;
    unsigned int * p = new unsigned int[x/3];
    p[0] = 2;
    p[1] = 3;

    cin >> x;
    cin.clear();
    if (x < 2)
    {
        cout << x << " no es mayor que 1." << endl;
        goto start;
    }

top:
    while (x>1)
    {
        for (a=0; a<n; a++)
        {
            if (x%p[a]==0)
            {
                x/=p[a];
                cout << p[a] << ", ";
                goto top;
            }
        }

        max = int(sqrt(x));
        while (i < max)
        {
            d = int(sqrt(i+=2));
            j = 1;
            while (d >= p[j] && i%p[j]) j++;
            if (d < p[j])
            {
                p[n++] = i;
                if (x%i == 0)
                {
                    cout << i << ", ";
                    x/=i;
                    goto top;
                }
            }
        }
        cout << x << ".";
        break;
    }
    delete [] p;
    goto start;
};

Comentarios