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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
#1

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

06.06.2012, 13:53. Просмотров 1258. Ответов 7
Метки нет (Все метки)

Всем добрый день.
Есть два указателя на char. Для первого выделяется память а у второго просто делаем копию с первого.
Для 1-го указателя надо удалять выделенную память. А вот для второго непонятно. То ли удалять, то ли нет. Ведь для него не используется операция new. Вообщем хочу понять как правильно. Подскажите.
Код
	char *s, *s_copy;

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

	...

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

Указатели, функции и динамическое выделение памяти: вывести строки с неповторяющимися данными - C++
Задана матрица A(n,n) ,n<=15 . Написать программу, которая находит и выводит на экран номера тех строк, элементы которых не...

Освобождение памяти и указатели - C++
int **Matrix1 = new int*; // Создаем 1-ю матрицу for (int i(0); i < N1; i++) Matrix1 = new int; Подскажите пожалуйста, как...

Выделение-освобождение памяти - C++
Добрый день. Написал заготовку под программу. Возник вопрос: правильно ли выделяю-освобождаю память? Программа работает корректно, но...

Выделение и освобождение памяти - C++
Вот встретился с вопросом какой вариант является более правильным и почему. char *Buffer1 = (char *)malloc(65536) char *Buffer2 =...

Выделение и освобождение памяти - C++
Доброго времени суток. Пишу класс по ООП, и назрел один вопрос, связанный с моментом выделения и освобождения памяти. class SOK { ...

Освобождение и выделение памяти - C++
Помогите разобраться с программой, где здесь выделение памяти (как я понял это new) и где освобождение памяти. #include <iostream> ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 14:05 #2
у вас s и s_copy содержат адрес одной области памяти, поэтому осводив память через один указатель, другой станет невалидным
0
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 14:11  [ТС] #3
Нет. У них адреса получаются разные. Вот на скриншоте.
0
Миниатюры
Указатели на строки. Выделение и освобождение памяти  
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 14:21 #4
как вы получили эти адреса?
через аперсанд &s?
если так, то это адрес переменно s, а не адрес который она содержит) не путайте.
0
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 может быть один, а адрес что в нем хранится совсем другой?
0
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;
1
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 указывают на одну и ту же память? Или они указывают на одну и ту же строку? Что- то никак не могу понять

Все, понял. Я пока написал то вы уже ответили
0
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 14:48 #8
они указывают на одну память, в которой хранится строка)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 14:48
Привет! Вот еще темы с ответами:

выделение и освобождение памяти - C++
В моей программе есть следующий код: char* lexems; // массив указателей на символ char* lexem; // вспомогательная...

Выделение и освобождение памяти в c++ - C++
Не давно наткнулся на такую замечательность : system(&quot;PAUSE&quot;);//1 раз int *p = new int; // память system(&quot;PAUSE&quot;);//2 раз ...

Освобождение и выделение динамической памяти - C++
Привет народ, такой вопрос: Допустим в main, указателю выделил память, всё разумеется нормально, читаю пишу всё ок, потом передал этот...

Выделение и освобождение памяти в конструкторе и деструкторе - C++
Есть программа с классом содержащим обьекты векторы. Однако по кончанию программы выбивате ошибку _block_type_is_vali(phead-&gt;nblockuse)....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.06.2012, 14:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru