Проверка, можно ли освободить указатель

Я искал ответ на этот вопрос повсюду, но не нашел его. (У меня довольно ограниченный опыт работы с C ++)

В моей библиотеке Я освобождаю строку. (Удивительно, да?)

Вот где возникает проблема. У меня есть структура, которая содержит char *, который может быть выделен в куче, а может и не быть. Хотя это действительный указатель, он не может быть освобожден.

IE

char* s1 = "A String";
char* s2 = (char*)memcpy(malloc(9), s1, 9);

free(s2);
free(s1);

Вызовет ошибку на "free (s1);" (Как это должно) Поскольку s1 на самом деле не требует освобождения , (его нет в куче), как я могу справиться с этим "приемлемым" способом? (В схожих темах ответ «пусть произойдет сбой» не казался разумным, ИМО)

Поскольку структура создается не только библиотекой, невозможно гарантировать, что строка будет правильно скопирована, используя что-то вроде memcpy.

Поскольку это библиотека для Windows, мне не нужно беспокоиться об использовании материалов ISO C или стандартных функций C.

5
задан James 1 January 2011 в 05:09
поделиться