Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамика, Нужна помощь 
:(
    Опции темы
Alexandr87
Дата 28.11.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 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();

}
PM Jabber   Вверх
Mad
Дата 28.11.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



Alexandr87
Ошибка может возникать только если эти функции из разных модулей (например одна из .exe, другая из .dll) в одном модуле ошибка возникать не будет.

А эсли тебе надо обязательно разделение, тогда пользуюся API функциями для выделения и освобождения памяти.


--------------------
user posted image
PM MAIL   Вверх
Alexandr87
Дата 28.11.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 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;
}

PM Jabber   Вверх
Mad
Дата 28.11.2004, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



Цитата(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() возврашает без него)



--------------------
user posted image
PM MAIL   Вверх
Alexandr87
Дата 29.11.2004, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 2
Всего: 39



Mad
Спасибо вот это то я и забыл, но интересен факт именно на strcpy() - ошибка не вылетает. Зато теперь нормально происходит удаление памяти, выделенной в другой функции, что как раз таки объяснимо.
Спасибо
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.