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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2012, 20:42   #1
theYozh
Пользователь
 
Аватар для theYozh
 
Регистрация: 28.01.2009
Сообщений: 75
Печаль Глупый затык с указателем

Всем привет!

Есть простецкий кусок кода:
Код HTML:
void f(int *a)
{
	a = new int;
	*a = 5;
}

int main()
{
	int *x;
	f(x);
	cout << *x;
	delete x;

	cin.get();
	return 0;
}
Всю голову сломал, но так и не понял, почему в консоли не выводтся "5" ?
Форумчане, очень надеюсь на вашу помощь)

Последний раз редактировалось theYozh; 04.09.2012 в 20:49.
theYozh вне форума Ответить с цитированием
Старый 04.09.2012, 20:50   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

найди отличие:

Код:
#include <iostream>

void f(int*& a)
{
   a = new int;
   *a = 5;
}

using namespace std;

int main()
{
   int *x;
   f(x);
   cout << *x;
   delete x;

   cin.get();
   return 0;
}
На будующее запомни: все аргументы функций всегда копируются.
Другими словами, внутри функции участвуют копии входных аргументов, а вовсе не оригиналы
_Bers вне форума Ответить с цитированием
Старый 04.09.2012, 20:55   #3
theYozh
Пользователь
 
Аватар для theYozh
 
Регистрация: 28.01.2009
Сообщений: 75
По умолчанию

_Bers, спасибо! Понял, разобрался. На весы нажал
theYozh вне форума Ответить с цитированием
Старый 04.09.2012, 20:58   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

theYozh

Всю голову сломал, но так и не понял, почему в консоли не выводтся "5" ?

Очень просто. Функция принимает указатель на целое и внутри неё 'а' - это копия адреса x
когда ты выделяешь память, то 'а' присваивается некоторое значение адреса памяти, уже не имеющего ничего общего с 'x'
В это память даже чего-то пишется, разумеется на 'x' это никак не влияет.
Ну а утечка памяти и крэш программы в конце - это уже классика((((Ж
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с указателями compiler90 Visual C++ 1 04.06.2012 18:52
Работа с указателями yaapelsinko Общие вопросы Delphi 3 15.02.2012 01:13
Работа с указателями Byurrer Общие вопросы C/C++ 8 02.04.2011 21:09
Работа с указателями stas135642 Общие вопросы C/C++ 2 21.11.2010 15:05
Работа с указателями (C) pixel_ Помощь студентам 1 28.08.2009 14:07