| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Динамика |
| Автор: Alexandr87 28.11.2004, 16:53 |
| Вот две функции из одной вызывается другая. Пример образный. Внимание! Вопрос: Каким образом можно высвободить память выделенную в функции con для temp. Нужно именно так, выделить память по ситуации, передать на нее указатель во внешнюю функцию. Но как избежать утечки памяти. При попытке удалить память во внешней функции - ошибка, кстати тоже хотелось бы знать почему char* con() { char* str="asdasd"; char* temp; temp=new char[strlen(str)]; strcpy(temp,str); return temp; } void main() { char* my=con(); std::cout<<my; std::cin.get(); } |
| Автор: Mad 28.11.2004, 16:58 |
| Alexandr87 Ошибка может возникать только если эти функции из разных модулей (например одна из .exe, другая из .dll) в одном модуле ошибка возникать не будет. А эсли тебе надо обязательно разделение, тогда пользуюся API функциями для выделения и освобождения памяти. |
| Автор: Alexandr87 28.11.2004, 17:06 |
| Хочется сказать что всё находить в одном EXE, и вот не могу врубиться у чём усетаки дело, вроде автоматически эта память освобождаться не может. Добавлено @ 17:09 компилятор VisStudio.Net. Проект debugовский, ошибка именно ASSERTовская, вощем объясните у чем дело Добавлено @ 17:10 Полный код, короч мож я совсем дебил, чтондь здысь не так написал #include <iostream> char* con() { char* str="asdasd"; char* temp; temp=new char[strlen(str)]; strcpy(temp,str); return temp; } void main() { char* my=con(); std::cout<<my; std::cout<<strlen(my); std::cin.get(); delete [] my; } |
| Автор: Mad 28.11.2004, 17:17 | ||||
Ошибка должна вылетать на strcpy(); надо
Память под 0 терминатор (strlen() возврашает без него) |
| Автор: Alexandr87 29.11.2004, 14:05 |
| Mad Спасибо вот это то я и забыл, но интересен факт именно на strcpy() - ошибка не вылетает. Зато теперь нормально происходит удаление памяти, выделенной в другой функции, что как раз таки объяснимо. Спасибо |