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

указатели и new - C++

Восстановить пароль Регистрация
 
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 20:27     указатели и new #1
объясните разницу между
C++
1
int *p = new int;
и
C++
1
int *p;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
27.02.2013, 20:48     указатели и new #2
В первом случае выделяется память под одно целое число и указателю присваивается значение, указывающее на эту выделенную память. Во втором случае просто создаётся указатель. Указывать он может в самые неожиданные места.
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 21:01  [ТС]     указатели и new #3
т.е. я могу написать приблизительно следующее:
C++
1
2
int *p = new int;
*p = 10;
и в данном случае число 10 у меня будет храниться в выделенной памяти?
что будет если я напишу:
C++
1
2
int *p;
*p=10;
?
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
27.02.2013, 21:18     указатели и new #4
да, в первом случае действительно будет всё в порядке. Второе недопустимо. А вообще говоря, не бойтесь, пробуйте. Синим пламенем вряд ли что-то загорится.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2013, 21:20     указатели и new #5
Ничего хорошего (зависит от компилятора). Попытка записать значение в невыделенную память.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.02.2013, 21:27     указатели и new #6
Цитата Сообщение от CEBEP Посмотреть сообщение
А вообще говоря, не бойтесь, пробуйте.
Отличный совет новичку.
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 21:29  [ТС]     указатели и new #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Ничего хорошего (зависит от компилятора). Попытка записать значение в невыделенную память.
т.е. загвоздка в том, что в случае int *p; мы не выделяем память, а просто объявляем пустой указатель?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2013, 21:36     указатели и new #8
Цитата Сообщение от lowlol Посмотреть сообщение
т.е. загвоздка в том, что в случае int *p; мы не выделяем память, а просто объявляем пустой указатель?
Да. Память выделяется под сам указатель. Но под int, на который он должен указывать, нет.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.02.2013, 21:37     указатели и new #9
загвоздка в том, что такой подход приведет к неопределенному поведению. А это значит, что твоя программа, может и будет работать. Но однажды она таки сгорит синим пламенем во время выполнения, скорее всего, когда будешь показывать начальству.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2013, 21:41     указатели и new #10
Что находится при этом в самом указателе, наверное, зависит от компилятора. Если сделать так:
C++
1
2
3
int *p;
cout << &p << endl;
cout << p << endl;
то студия выдаст это.
Миниатюры
указатели и new  
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
27.02.2013, 21:52     указатели и new #11
Цитата Сообщение от alsav22 Посмотреть сообщение
наверное, зависит от компилятора.
Что было в этой памяти, то и получили.
вот примерчик:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void foo1(){
    volatile int p=213;
    p*=2;
    std::cout<<p<<std::endl;
}
 
void foo2(){
    volatile int p;
    p*=2;
    std::cout<<p<<std::endl;
}
int main(){
    foo1();
    foo2();
}
Результат у меня в MinGW:
Название: Безымянный.png
Просмотров: 38

Размер: 2.5 Кб
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 22:07     указатели и new
Еще ссылки по теме:

C++ Написать программу сортировки через указатели на указатели
Указатели и массивы. Указатели и функции C++
Указатели на массивы. Указатели и функции C++

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

Или воспользуйтесь поиском по форуму:
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.02.2013, 22:07     указатели и new #12
0xcccccccc - такими значениями забивает неинициализированную память отладчик msvc++.
Yandex
Объявления
27.02.2013, 22:07     указатели и new
Ответ Создать тему
Опции темы

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