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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2012, 10:02   #1
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
Вопрос delete динамического массива символов

Здравствуйте, пишу простой код в VC++ 6, вопрос в комментяриях???:

Код:
#include <iostream.h>
#include <string.h>
int main()
{  
	char * str;
	str = new char[11];

	str = "1234567890";

	char * surce = new char[11];
	strcpy(surce, str);

	delete [] str;   // вываливается с ошибкой !!!!

	return 0
}
в чём причина такого результата??

Последний раз редактировалось Dmitry333; 10.02.2012 в 10:16.
Dmitry333 вне форума Ответить с цитированием
Старый 10.02.2012, 10:51   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

в этой строке str = "1234567890"; вы теряете указатель на выделенный блок памяти, а потом пытаетесь удалить delete [] str; строковый литерал, под который память зарезервировал компилятор и изменить ее нельзя.

Выход:

Код:
strcpy(str,"1234567890");
counter вне форума Ответить с цитированием
Старый 10.02.2012, 11:09   #3
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
в этой строке str = "1234567890"; вы теряете указатель на выделенный блок памяти, а потом пытаетесь удалить delete [] str; строковый литерал, под который память зарезервировал компилятор и изменить ее нельзя.

Выход:

Код:
strcpy(str,"1234567890");
ок, тогда здесь что??

Код:
class WordsExchanging
{
	char * str;
public:
	WordsExchanging() 
	{
		str = new char [1]; 
		str[0]='\0'; 
	}
	explicit WordsExchanging(char * );
	~WordsExchanging();

};

inline WordsExchanging::WordsExchanging(char * ch) 
{
	str = new char[strlen(ch)];
	strcpy(str, ch);
}


inline WordsExchanging::~WordsExchanging()
{
	delete [] str; // вываливается(((
}

int main()
{  
	WordsExchanging str("sadaasd");

	//str.SetNewString("  first  sfdsdfsdfsdf  s word last	");
	//str.ExchangeWords();

	return 0;
}
Dmitry333 вне форума Ответить с цитированием
Старый 10.02.2012, 11:18   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

а так

Код:
str = new char[strlen(ch)+1];
counter вне форума Ответить с цитированием
Старый 10.02.2012, 11:20   #5
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
а так

Код:
str = new char[strlen(ch)+1];
всё ок, благодарю)
Dmitry333 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длина многомерного массива Johnson Общие вопросы Delphi 2 18.02.2011 08:25
длина массива Артэс Общие вопросы C/C++ 4 06.10.2010 12:34
Длина и замена символов строки - Полиморфизм ArniLand Общие вопросы .NET 1 23.04.2010 05:55
Delphi. как добавить в Memo 5 строк, длина каждой 10 символов. Nostalgia Помощь студентам 3 21.03.2010 12:31
длина массива skif93 Microsoft Office Excel 2 24.11.2007 11:45