Мне было интересно, почему следующий код не работает
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
test = "testingonly";
free(test);
}
Подумав об этом, я предположил, что сначала я выделяю место для 12 символов в памяти, но назначение в следующей строке создает массив char в стеке, а адрес памяти этого объекта передается на тест. Поэтому free() пытается освободить место в стеке, которое не разрешено. Это правильно?
Итак, каков был бы правильный подход для сохранения строки в куче? Является ли следующий общий способ?
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
strcpy(test, "testingonly");
free(test);
}