Credo che l'errore sia dovuto al fatto che questa istruzione
codice:
test = "questa è una prova";
Non copia la stringa "questa è una prova" nel puntatore test, ma fa puntare test a "questa è una prova".
In C++ infatti, i "caratteri liberi", come li chiamo io, sono considerati dei const char *, e quindi dei puntatori.
Inoltre non hai liberato la memoria allocata con malloc (usa free())
Il codice corretto è quindi
codice:
int main()
{
char c = 'a';
char * test;
test = (char*) malloc(20);
strcpy(test,"questa è una prova");
test[0] = c;
free(test);
return 0;
}
Oppure puoi anche sostiturie
codice:
test = (char*) malloc(20);
strcpy(test,"questa è una prova");
con
codice:
test = strdup("questa è una prova");
che provvede in automatico all'allocazione.