может `const char *` вызвать проблемы? - PullRequest
2 голосов
/ 03 мая 2010

Могу ли я использовать free для const char*? Это вызовет какие-либо проблемы?

Ответы [ 2 ]

4 голосов
/ 03 мая 2010

Нет. По своей природе, free() нужна свобода для записи в данную память, для ведения «бухгалтерского учета». Вот почему он определен как не const указатель.

Как уже отмечали другие, это не значит, что это не может работать; C может отбросить const -ность указателя и позволить функции работать так, как если бы она была вызвана без const. Тем не менее, компилятор предупредит, когда это произойдет, поэтому я считаю, что он "вызывает проблемы".

1 голос
/ 03 мая 2010

Если указатель был выделен да. Вы получите предупреждение, но оно уже есть, когда вы его распределили.

Я часто использую const char * в своих структурах, когда хочу убедиться, что никто не пишет в них между распределением и выпуском. Часто случается, что вы динамически создаете строку, которая является неизменной на весь срок службы, и если вы вызываете ее с функцией с побочными эффектами (strtok), вы можете столкнуться с проблемами. Объявляя это const, вы можете по крайней мере получить предупреждение в этом случае.

const char *msg;

asprintf((char *)&msg, "whatever" ...);
...
strtok(msg, ",");     // Will generate a warning 
...
free((char*)msg);
...