Você pode determinar se uma string pode ser acessada em C? [duplicado

Esta pergunta já tem uma resposta aqui:

Verifique se um ponteiro aponta para a memória alocada na pilha 10 respostas

Se eu disser

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

char *x;
char *y;

int main() {
        x = malloc(sizeof("Hello, world!"));
        strcpy(x, "Hello world!");
        y = "Hello, world";
        free(x);
        fprintf(stderr, "okay");
        free(y);
}

Então, obviamente, o programa imprimirá "ok" seguido de morte porque o "ponteiro liberado não foi alocado" - obviamente, porque a string era litera

Eu gostaria de escrever uma função que não faz nada quando dados literais de seqüência de caracteres, mas chama de graça quando dados literais sem seqüência de caracteres. Isso é possível e, em caso afirmativo, como?

questionAnswers(5)

yourAnswerToTheQuestion