У меня есть прецедент, где я могу получить указатели на строки, выделенные либо в памяти, либо в литералах. Теперь последний не может быть освобожден, так что проблема, если я пройду неправильно. Есть ли способ узнать, какой из них выделен, а какие нет?
char *b = "dont free me!";
if(!IS_LITERAL(b)) {
free(b);
}
Я представляю что-то подобное.
Мой пример:
Сценарий 1: буквальный
char *b = "dont free me!";
scruct elem* my_element = mylib_create_element(b);
// do smth
int result = mylib_destroy_element(my_element); // free literal, very bad
Сценарий 2: в куче
char *b = malloc(sizeof(char)*17); // example
strncpy(b, "you can free me!",17);
scruct elem* my_element = mylib_create_element(b);
// do smth
int result = mylib_destroy_element(my_element); // free heap, nice
То, как пользователь вызывает mylib_create_element(b);
, не находится под моим контролем. Если он освобождается до mylib_destroy_element
, он может сработать. Таким образом, это должно быть mylib_destroy_element
, которое очищает.