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

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

Войти
Регистрация
Восстановить пароль
 
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
#1

Что означают числа перед динамическим массивом? - C++

05.01.2013, 11:17. Просмотров 578. Ответов 12
Метки нет (Все метки)

C++
1
2
3
4
int *ptr_int = new int[10];
 
for (int i=-4; i<=-1; i++)
    cout << *(ptr_int + i) << "  ";

И вот это будет напечатано:
40 1 333 -33686019

40 - это вроде размер массива
А что означают остальные числа?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 11:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что означают числа перед динамическим массивом? (C++):

Странность с динамическим массивом - C++
Меня в тупик поставило следующая ошибка (&quot;Название исполняемого файла&quot; has triggered a breakpoint.) В данном простеньком коде. Кто...

Работа с динамическим массивом - C++
Дано: динамический двумерный массив. Определить сумму всех элементов (с помощью функции, массив и его размерность передать в качестве...

Работа с динамическим массивом - C++
Помогите, пожалуйста. В чем проблема? Компилирует, но выполнять не хочет. Надо вставить элемент в конец динамического массива, удалить...

Проблема с динамическим массивом - C++
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; int l,r,i=0,j=0,k=0,k1=0,k2=0,x=2,z=1;int ost; int...

Класс с динамическим массивом - C++
доброго времени суток! помогите мне немножко: создать клас vector для сохранения массиву, розмеры от 10 до 10к, память виделите...

Не могу разобраться с динамическим массивом - C++
Объявляю массив так: int **mas; mas = new int*; for (int i = 0; i&lt;A; i++) { mas = new int; } в итоге выходит...

12
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,385
Записей в блоге: 2
Завершенные тесты: 1
05.01.2013, 11:23 #2
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
40 - это вроде размер массива
Совсем не факт, например вот вывод под linux'ом http://liveworkspace.org/code/1jIVnI$0
В общем случае это может быть все, что угодно. Возможно просто мусор.
1
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
05.01.2013, 11:36  [ТС] #3
Цитата Сообщение от Kastaneda Посмотреть сообщение
Возможно просто мусор.
В Windows есть какая-то закономерность. Вот например если создавать массивы
других типов float, double, то везде есть 1 и -33686019.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
05.01.2013, 12:18 #4
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
В Windows есть какая-то закономерность.
Конечно есть - система же должна знать сколько и где чего лежит.
Конкретно для вашего случая:
Поменяйте тип проекта с Debug на Release и проверьте свою теорию
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
05.01.2013, 12:40 #5
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
int i=-4; i<=-1
А разве так можно делать? Вы обращаетесь к -4 элементу массива и дальше по циклу до -1.
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
05.01.2013, 12:44 #6
Цитата Сообщение от coloc Посмотреть сообщение
А разве так можно делать? Вы обращаетесь к -4 элементу массива и дальше по циклу до -1.
Ну так это просто адресная арифметика. Он обращается к блоку памяти передом массивам (где, видимо, в дебаг-версии стоит префиксом размер и ещё какая-то инфа)
0
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
05.01.2013, 12:48  [ТС] #7
Цитата Сообщение от Croessmah Посмотреть сообщение
Поменяйте тип проекта с Debug на Release и проверьте свою теорию
В Release сплошной мусор)

Добавлено через 1 минуту
Цитата Сообщение от coloc Посмотреть сообщение
А разве так можно делать?
В C++ все можно
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
05.01.2013, 12:57 #8
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
В C++ все можно
Да... все можно... Я недавно тоже с указателями игрался... Переустанавливал систему потом (не факт что именно от указателей)
ЗЫ Интересно, а может вот такой выход за границы массива сделать что то ОС?
0
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
05.01.2013, 12:58  [ТС] #9
Что же все-таки эта единица означает?
40 1 333 -33686019
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.01.2013, 12:58 #10
coloc, нет.
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
05.01.2013, 13:05 #11
Toshkarik, Я нагуглил вот что http://ru.wikipedia.org/wiki/%CF%E5%...F3%F4%E5%F0%E0 Здесь пишут, что возможно изменить данные.
Ааа, дочитал до конца, там у виндовса специальные средства защиты
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.01.2013, 13:20 #12
coloc, это совсем разные вещи. Простым выходом за пределы выделенной процессу памяти, Вы не сможете изменить данные другого процесса, и уж тем более ОС.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
07.01.2013, 18:18 #13
Это зависит от конкретной реализации стандартной библиотеки. Поэтому вопрос "что обозначают эти числа" правильней задавать упоминая, где и с какой библиотекой ты компилируешь. Ничто не мешает тебе отдебажить и посмотреть, для чего там что нужно. Если ты будешь выделять память под объекты, то в эту область еще добавится инфа об их количестве, так как, нужно при удалении вызывать деструкторы для каждго объекта. Там же где-нибудь, может быть, лежит инфа о том, с объектами ли мы вообще имеем дело. И не факт, что это именно число, вполне может быть маска для чего-либо.
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
-33686019
, к примеру, может быть использовано в дебажных версиях для проверки повреждения кучи. Ну и в дебажных версиях библиотек все эти данные могут в корне отличаться от релизных, на то они и дебажные.
Самый верный способ - дебаггер в руки и мучить new с delete.
0
07.01.2013, 18:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 18:18
Привет! Вот еще темы с ответами:

Ошибка связанная с Динамическим массивом - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; int main() { using namespace std; char * ch = new char; cin &gt;&gt; ch; for (int i = 1; i...

Ошибка в функции с динамическим массивом - C++
Данный код у меня выдаёт ошибку :Необработанное исключение в &quot;0x01281d09&quot; в &quot;Chernovick.exe&quot;: 0xC0000005: Нарушение прав доступа при чтении...

Работа с динамическим двумерным массивом - C++
Написал код. В двумерном массиве 5х5 находится максимальное значение каждой строки и затем минимальное из них. Необходимо указывать...

Работа с динамическим массивом структур - C++
Односвязный список. Проблема (скорее всего) в строке ListPoint1 = pointer; Pointer использую как временный элемент, чтобы потом записать...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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