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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2009, 22:07   #1
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию Вопрос по мелочи

Простенькая программка, есть небольшой вопросик.
Почему,если убрать вот эту строку:
Код:
p3-=1;
Программа выдаст исключение, и не сработает?

Код:
#include <iostream>
using namespace std;

int main()
{
	setlocale(0,"");
	double *p3 = new double[3];
	p3[0] = 0.2;
	p3[1] = 0.5;
	p3[2] = 0.8;
	cout<<"p3[1] = "<<p3[1]<<'\n';
	p3+=1;
	cout<<"Сейчас p3[0] = "<<p3[0]<<" и "
	<<"p3[1] = "<<p3[1]<<'\n';
	p3-=1;
	delete [] p3;
	cin.get();
}
Syltan вне форума Ответить с цитированием
Старый 28.09.2009, 22:52   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Потому что перед этим написано p3+=1. Ну нельзя половину выделенного куска освободить. Либо всё, либо ничего, а без p3-=1, p3 будет указывать не на начало выделенного блока памяти и потому удалить ничего не получится.
pu4koff вне форума Ответить с цитированием
Старый 28.09.2009, 22:59   #3
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Тоесть вы хотите сказать,что если выделяется память под масив указателей на 3 элемента, тогда и освобождатся должно именно 3 элемента, не больше и не меньше?
Syltan вне форума Ответить с цитированием
Старый 28.09.2009, 23:52   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Syltan Посмотреть сообщение
Тоесть вы хотите сказать,что если выделяется память под масив указателей на 3 элемента, тогда и освобождатся должно именно 3 элемента, не больше и не меньше?
Да. Только вопрос количества лежит на плечах компилятора, а наша задача передать в delete то, что получили в new и ни байтом в сторону
pu4koff вне форума Ответить с цитированием
Старый 28.09.2009, 23:59   #5
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Ещё один идентичный вопрос, немного не понятный.
Скажите, почему,если написать так:
Код:
char *pn = new char[strlen(temp) ];
в этой программе:
Код:
#include <iostream>
#include <cstring>
using namespace std;
char *getname();

int main()
{
	setlocale(0,"");
	char * name;
	name = getname();
	cout<<name<<" at "<<(int*)name<<endl;
	delete [] name;
	name = getname();
	cout<<name<<" at "<<(int*)name<<endl;
	delete [] name;
	cin.ignore();
	cin.get();
}

char *getname()
{
	char temp[80];
	cout<<"ENTER last name: ";
	cin>>temp;
	char *pn = new char[strlen(temp) +1];
	strcpy(pn,temp);
	return pn;
}
Программа выдаст также саммо результат, но ещё вдобавок ко всему выдаст табличку исключения?Почему обязательно нужно писать "+1"? Ещё вопрос, зачем используется приведение к указателю на инт:
Код:
(int*)name

Последний раз редактировалось Syltan; 29.09.2009 в 00:07.
Syltan вне форума Ответить с цитированием
Старый 29.09.2009, 00:07   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что нужно еще символ #0 поместить, он означает конец строки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.09.2009, 00:19   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Syltan Посмотреть сообщение
Ещё вопрос, зачем используется приведение к указателю на инт:
Код:
(int*)name
Чтобы посмотреть адрес области памяти, в какой расположена эта строка
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по мелочи Golovastik Общие вопросы C/C++ 8 23.07.2009 22:47
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Вопрос по VS C++ Arthur Общие вопросы C/C++ 2 19.01.2008 18:34