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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2015, 15:56   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Почему нету ошибки компиляции ?

Всем доброго дня !

Подскажите почему при выполнении

Код:
for (i=0;i<5;i++)
	{
		V[i]=i+1;
		V[i].hgj();
	}
не получаю предупреждение ?

перед этим же было выполнено delete [] V;

Код:
#include <stdio.h>
#include <conio.h>
#include<iostream>

using namespace std;


class A

{
	int x;

public:

	A() : x(0) {}
	A(int a) : x(a) {}
	~A() {}
	A(const A &rhs) : x(rhs.x) {}
	void hgj() const {printf("\nHello! %p %d\n",this,x);}
	A & operator = (const A &rhs)
	{
                if(this != &rhs) x = rhs.x;
		return *this;
	}
};

int main()

{   A *V = new A[5];
    A *k = V;
	for (int i=0;i<5;i++)
	{
		printf("\nV[%d] = %p %p\n",i,&V[i],k);
		V[i].hgj();
	}

    printf("\n*************************\n");
	delete [] V;
    for (i=0;i<5;i++)
	{
		V[i]=i+1;
		V[i].hgj();
	}
	getch();
	return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 11.08.2015, 16:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А почему при компиляции компилятор должен давать ошибки выполнения?
Ты запускал программу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 16:27   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А почему при компиляции компилятор должен давать ошибки выполнения?
Ты запускал программу?
извините , не правильно выразился.

программа работает без аварийного завершения.
RAFA91 вне форума Ответить с цитированием
Старый 11.08.2015, 16:39   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А почему она должна завершаться аварийно?
Память только отмечена как свободная, с точки зрения процессора указатель как указывал так и указывает.
Язык не делает за вас проверки во время выполнения, именно в этом весь смысл С/С++.
waleri вне форума Ответить с цитированием
Старый 11.08.2015, 16:49   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ага, простреливание ног — смысл С/C++.

Некоторые не понимают этого и создают статические анализаторы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.08.2015, 16:57   #6
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

нужно было сделать так ?

Код:
delete [] V;

V = 0;
RAFA91 вне форума Ответить с цитированием
Старый 11.08.2015, 17:24   #7
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Согласно моим скромным знаниям нужно сделать так:
Код:
V = NULL;
Цитата:
"В никуда возьму билет..." (Популярная советская песня)
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...

Последний раз редактировалось jura_k; 11.08.2015 в 17:31.
jura_k вне форума Ответить с цитированием
Старый 11.08.2015, 17:31   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
нужно было сделать так ?
В принципе да, но нужно избегать использования указателей напрямую, только через классы обертки!
waleri вне форума Ответить с цитированием
Старый 11.08.2015, 17:35   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

nullptr если уж на то пошло.

jura_k, NULL равен 0, макросом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.08.2015, 17:45   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И nullptr или какой-нибудь NULL (если вдруг не С++11) лучше воспринимается людьми, чем 0.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 11.08.2015 в 17:47.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибки при компиляции с++ *Fantom* Помощь студентам 1 29.10.2013 08:37
Почему на Linux вирусов нету, а на Android есть? Ale}{ander Общие вопросы по программированию, компьютерный форум 13 06.09.2013 20:00
Unity 3D почему в инспекторе нету FBXimporter SevenXP Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 22.10.2012 21:18
ошибки компиляции KOLANICH Общие вопросы C/C++ 0 25.02.2012 17:14
Ошибки после компиляции Cakeinpanic Общие вопросы C/C++ 8 16.05.2009 14:48