Форум программистов, компьютерный форум CyberForum.ru

Указатели на строки. Выделение и освобождение памяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 13:53     Указатели на строки. Выделение и освобождение памяти #1
Всем добрый день.
Есть два указателя на char. Для первого выделяется память а у второго просто делаем копию с первого.
Для 1-го указателя надо удалять выделенную память. А вот для второго непонятно. То ли удалять, то ли нет. Ведь для него не используется операция new. Вообщем хочу понять как правильно. Подскажите.
Код
	char *s, *s_copy;

	s = new char[20];
	strcpy(s, "Строка");
	s_copy = s;

	...

	delete [] s;
	//delete [] s_copy;	// как правильно? И нужно ли вообще удалять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 13:53     Указатели на строки. Выделение и освобождение памяти
Посмотрите здесь:

выделение и освобождение памяти C++
C++ выделение памяти и никогда не выполняете* ее освобождение
C++ Выделение и освобождение памяти в c++
Освобождение и выделение памяти C++
C++ Выделение и освобождение памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 14:05     Указатели на строки. Выделение и освобождение памяти #2
у вас s и s_copy содержат адрес одной области памяти, поэтому осводив память через один указатель, другой станет невалидным
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 14:11  [ТС]     Указатели на строки. Выделение и освобождение памяти #3
Нет. У них адреса получаются разные. Вот на скриншоте.
Миниатюры
Указатели на строки. Выделение и освобождение памяти  
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 14:21     Указатели на строки. Выделение и освобождение памяти #4
как вы получили эти адреса?
через аперсанд &s?
если так, то это адрес переменно s, а не адрес который она содержит) не путайте.
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 14:25  [ТС]     Указатели на строки. Выделение и освобождение памяти #5
Цитата Сообщение от antoha398 Посмотреть сообщение
как вы получили эти адреса?
Код
	cout << "     s = " << s			<< "     , &s = " << &s		<< endl;
	cout << "s_copy = " << s_copy		<< ", &s_copy = " << &s_copy	<< endl;
Добавлено через 2 минуты
Цитата Сообщение от antoha398 Посмотреть сообщение
это адрес переменно s, а не адрес который она содержит) не путайте.
Вот это я что-то не совсем понимаю. То есть адрес у указателя на char может быть один, а адрес что в нем хранится совсем другой?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 14:41     Указатели на строки. Выделение и освобождение памяти #6
То есть адрес у указателя на char может быть один, а адрес что в нем хранится совсем другой?
да. у любой переменной( в том числе указателя) есть адрес, по которому она хранится в памяти. его можно получить так &s;
а переменная-указатель может хранить эти адреса, как например, тип int хранит целые числа.

Добавлено через 4 минуты
не знаю как получить адрес содержащийся в укателе на char
поэтому привожу пример для int
C++
1
2
3
4
5
6
int *s, *ss;
   s = new int[10];
    s[0]=11;
    s=ss;
    cout << &s <<endl << &ss << endl;
   cout << s <<endl << ss;
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 14:46  [ТС]     Указатели на строки. Выделение и освобождение памяти #7
Спасибо antoha398. Но вот что еще хочу спросить. Не до конца понял. Есть указатель на char *s_copy;
И когда вот так делаем
Код
s_copy = s;
Это получается что у s и s_copy указывают на одну и ту же память? Или они указывают на одну и ту же строку? Что- то никак не могу понять

Все, понял. Я пока написал то вы уже ответили
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 14:48     Указатели на строки. Выделение и освобождение памяти
Еще ссылки по теме:

C++ Выделение-освобождение памяти
Указатели, функции и динамическое выделение памяти: вывести строки с неповторяющимися данными C++
C++ Освобождение и выделение динамической памяти

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 14:48     Указатели на строки. Выделение и освобождение памяти #8
они указывают на одну память, в которой хранится строка)
Yandex
Объявления
06.06.2012, 14:48     Указатели на строки. Выделение и освобождение памяти
Ответ Создать тему
Опции темы

Текущее время: 07:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru