Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(Alexandr87 @ 28.11.2004, 16:06)
char* temp;
temp=new char[strlen(str)];
strcpy(temp,str);

Ошибка должна вылетать на strcpy();
надо
Код

temp=new char[strlen(str)+1];

Память под 0 терминатор (strlen() возврашает без него)

Автор: Alexandr87 29.11.2004, 14:05
Mad
Спасибо вот это то я и забыл, но интересен факт именно на strcpy() - ошибка не вылетает. Зато теперь нормально происходит удаление памяти, выделенной в другой функции, что как раз таки объяснимо.
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)