C ++ Generador de números aleatorios sin repetición

Necesito crear una implementación de algoritmo en C ++ para generar números aleatorios para la tabla f.e sin repetir y listar.

Creé un código como ese pero deja de funcionar cuando pongo n = 32769 en el programa de consola deja de funcionar. Cuando pongo el número en el rango 0-32768 funciona. ¿Alguna idea de lo que está mal en este código? Mientras que la compilación no tuve errores / advertencias.

#include <stdio.h>
#include <iostream>
#include <ctime>


int main()
{
    clock_t start = clock();
    int n;
    std::cout << "n:";
    std::cin >> n;
    bool *used_numbers = new bool[n];
    memset(used_numbers, false, sizeof(used_numbers[0]) * n);
    int *permutation = new int[n];
    srand(unsigned(std::time(NULL)));
     int rnd_number;



    for (int i = 0; i < n; i++)
    {
        rnd_number = rand() % n;
        if (!used_numbers[rnd_number])
        {
            permutation[i] = rnd_number;
            used_numbers[rnd_number] = true;
        }
        else
            i--;
    }
    std::cout << "Permutation: \n ";
    for (int k = 0; k < n; k++)
    {
        std::cout << permutation[k] << " ";
    }
    std::cout << std::endl;

    printf("[Debug]: %lu ms\n", clock() - start);




    getchar();
    system("pause");
    return 0;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta