Error de segmentación - puntero de caracteres

En el siguiente código, la línea:

*end = *front;

da una falla de segmentación. Hice una pregunta similaraqu pero no estoy seguro si esto se debe a que tengo dos copias de num. Por favor explique por qué es seg-faulting. Gracias

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* getPalin(char* num);

int main()
{
    char* num = (char*)malloc(100);

    num = "123456";

    printf("%s\n", getPalin(num) );

    return 0;
}

char* getPalin(char* num)
{
    int length = strlen(num);

    if ( length % 2 == 0 )
    {
        char* front = num;
        char* end = num + strlen(num) - 1;  //pointer to end

        while( front != num + (length/2) )  //pointers not middle yet
        {
            *end = *front;

            printf("%c", *end);

            front++;
            end--;
        }
    }

    return num;
}

Respuestas a la pregunta(8)

Su respuesta a la pregunta