Невозможно освободить константные указатели в C - PullRequest
62 голосов
/ 12 мая 2010

Как я могу освободить const char*? Я выделил новую память, используя malloc, и когда я пытаюсь освободить ее, я всегда получаю сообщение об ошибке «несовместимый тип указателя»

Код, который вызывает это что-то вроде:

char* name="Arnold";
const char* str=(const char*)malloc(strlen(name)+1);

free(str); // error here

Ответы [ 12 ]

0 голосов
/ 12 мая 2010

Я думаю, что даже если вы приведете указатель к неконстантному, результат свободной воли зависит от реализации. Обычно const был разработан для переменной, которую вы не хотите изменять !!

0 голосов
/ 12 мая 2010

Вы не можете освободить const char *, потому что это const. Сохраняйте указатели, полученные от malloc, в неконстантных переменных-указателях, чтобы их можно было передавать в free. Вы можете передавать char * аргументы в функции, принимающие const char * аргументы, но обратное не всегда верно.

void foo (const char *x);
char *ptr = malloc (...);
foo (ptr);
free (ptr);
...