![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
Вот две функции из одной вызывается другая. Пример образный.
Внимание! Вопрос: Каким образом можно высвободить память выделенную в функции 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 |
|
|||
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Alexandr87
Ошибка может возникать только если эти функции из разных модулей (например одна из .exe, другая из .dll) в одном модуле ошибка возникать не будет. А эсли тебе надо обязательно разделение, тогда пользуюся API функциями для выделения и освобождения памяти. |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
Хочется сказать что всё находить в одном 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 |
|
||||
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Ошибка должна вылетать на strcpy(); надо
Память под 0 терминатор (strlen() возврашает без него) |
||||
|
|||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
Mad
Спасибо вот это то я и забыл, но интересен факт именно на strcpy() - ошибка не вылетает. Зато теперь нормально происходит удаление памяти, выделенной в другой функции, что как раз таки объяснимо. Спасибо |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |