Falha na segmentação - char pointer

No código abaixo, a linha:

*end = *front;

gera uma falha de segmentação. Eu fiz uma pergunta semelhanteaqu mas não tenho certeza se é porque tenho duas cópias de num. Por favor, explique por que está com falha de seg. Obrigado

#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;
}

questionAnswers(8)

yourAnswerToTheQuestion