Есть приложение и библиотека dll, с которой оно работает. Из dll'ки импортируется функция GetFilList, которая выделяет внутри себя память. При этом необходимо, чтобы выделенная память была доступна потом снаружи, в приложении. Код dll'ки: Код (Text): extern "C" __declspec(dllexport) int GetFileList(..., char **packed_files, unsigned int *packed_size) { ... *packed_size = 123; *packed_files = new char[*packed_size] //Пишем *packed_size байт в *packed_files return EXIT_SUCCESS; } В приложении, dll'ка вызывается следующим образом: Код (Text): int main() { char *packed_files; unsigned int packed_size; GetFileList(..., &packed_files, &packed_size); //Теперь можно совершенно нормально работать с данными по указателю packed_files //Все packed_size байт содержат именно то, что было записано внутри функции GetFileList. delete [] packed_files; //delete здесь приведет к повреждению кучи! } Пробовал удалять "delete [] *packed_files;" прямо перед "return EXIT_SUCCESS;" в dll'ке - все работает, куча целая. Получается, что внутри функции в dll'ke память освобождается корректно, а сразу после выхода из функции - с повреждением кучи. Как так получается?
Рихтер 19 глава там как раз про случай с кучей общее правило таково если библиотека предоставляет интерфейс который выделяет память то она должна предоставить еще один интерфейс для освобождения этой памяти