Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 17:47   #1
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию delete[] не освобождает память

Приветствую! Такая проблема - имеется функция которая должна заменить строку другой строкой по указанному диапазону:

Код:
void formulatype::newformula(char* formula, char* str0, int start, int end)
 {
	char* formula1=NULL; formula1=new char[255];
	 int size=strlen(str0);
	 memcpy(formula1, formula, start);
	 strncat(formula1, str0, size);
	 start=strlen(formula1);
	 while(formula[end+1]!='\0'){ formula1[start]=formula[end+1]; start++;end++;};
	 formula1[start]='\0';
	 size=strlen(formula1);
	 for(int i=0; i<size; i++){formula[i]=formula1[i];}
	 formula[size]='\0';

	
	 	delete[] formula1;
 }
Ошибка возникает при освобождении памяти delete[] formula1; Прошу подсказать в чем причина?
Drakulov вне форума Ответить с цитированием
Старый 06.06.2012, 18:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Разве там нужны []?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.06.2012, 18:22   #3
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

Ну как бы память выделяется под массив как new[] так что по правилам должно использоваться delete[]...но я пробовал и без [] все равно =/
Drakulov вне форума Ответить с цитированием
Старый 06.06.2012, 18:41   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

наверно, проблема вылазит раньше, когда formula1 копируется в formula.
f.hump вне форума Ответить с цитированием
Старый 06.06.2012, 19:09   #5
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
наверно, проблема вылазит раньше, когда formula1 копируется в formula.
Да действительно проблема возникала после strncat(formula1, str0, size);
не понятно почему, только...

В общем не долго думая я немного под исправил:
Код:
void formulatype::newformula(char* formula, char* str0, int start, int end)
 {
	char* formula1=NULL; formula1=new char[255];
	 int size=strlen(str0);
	 for(int i=0; i<start; i++){formula1[i]=formula[i];}
	 
	 for(int i=0; i<size; i++){formula1[start]=str0[i]; start++;}
	
	 while(formula[end+1]!='\0'){ formula1[start]=formula[end+1]; start++;end++;};
	 formula1[start]='\0';
	 size=strlen(formula1);
	// delete[] formula1;Здесь delete[] работает
	 for(int i=0; i<size; i++){formula[i]=formula1[i];}
	 formula[size]='\0';

	delete[] formula1; // Тут уже нет
	 	
 }
Как видно проблема сместилась вниз... Почему после выполнения цикла "for(int i=0; i<size; i++){formula[i]=formula1[i];}" delete[] не работает?
Как исправить?
Drakulov вне форума Ответить с цитированием
Старый 07.06.2012, 09:34   #6
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

Я думал что нашел выход из ситуации, но не тут то было...


Код:
 void formulatype::newformula(char* formula, char* str0, int start, int end)
 {
	char* formula1=new char[255];
	 int size=strlen(str0);
	 for(int i=0; i<start; i++){formula1[i]=formula[i];}
	 for(int i=0; i<size; i++){formula1[start]=str0[i]; start++;}
	 while(formula[end+1]!='\0'){ formula1[start]=formula[end+1]; start++;end++;};
	 formula1[start]='\0';
	 size=strlen(formula1);

	 char* p=strdup(formula1);
	 for(int i=0; i<size; i++){formula[i]=p[i];}

	 formula[size]='\0';
	delete[] formula1;
	 	
 }
функция работает! О чудо! Ага, щас... 1 раз работает а при повторном вызове уже ругается на эту строчку char* p=strdup(formula1);
Господа-товарищи, в чем дело? Я не понимаю( Помогите, пожалуйста!
Drakulov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Visual: динамический массив - free не освобождает память Blondy Помощь студентам 4 28.04.2012 14:00
error C2541: 'delete' : cannot delete objects that are not pointers novokhatsky Общие вопросы C/C++ 2 14.12.2009 10:25
Почему Dispose не освобождает память? DeLorean Общие вопросы Delphi 4 08.04.2008 00:17