Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/55: Рейтинг темы: голосов - 55, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 20
1

Почему при создании динамического массива, отладчик видит только один первый элемент?

01.10.2012, 11:33. Показов 10590. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Объясните почему при создании динамического массива, отладчик (а точнее окно "контрольные значения") видит только один первый элемент?
Извините за название темы. Модератор, прошу Вас исправить на "отладчик и динамический массив"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2012, 11:33
Ответы с готовыми решениями:

Почему при создании динамического массива через new ячейки массива имеют значение -842150451?
Я хотел бы узнать почему при создании динамического массива через операцию new ячейки массива имеют...

Нужно ли устанавливать указатель на первый элемент динамического массива при его освобождении
Перед тем как освободить память от динамического массива, обязательно устанавливать указатель на...

При загрузке компа видит только один жесткий диск, а привод не видит.
У меня такая проблема. При загрузке компа видит только один жесткий диск, хотя стоит ещё сдиром....

Не получается удалить первый отрицательный элемент динамического массива
Удалить первый отрицательный элемент динамического массива помогите пожалуйста #include "stdafx.h"...

24
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
01.10.2012, 11:46 2
Видимо, вы создаёте динамический массив как-то так:
C++
1
int * array = new int[Capacity];
array - это не массив, а указатель на первый элемент массива. Его и видит отладчик.
1
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 20
01.10.2012, 13:18  [ТС] 3
Цитата Сообщение от John Prick Посмотреть сообщение
Видимо, вы создаёте динамический массив как-то так:
C++
1
int * array = new int[Capacity];
array - это не массив, а указатель на первый элемент массива. Его и видит отладчик.
А можно как-нибудь просмотреть сам динамический массив в отладчике?
0
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
01.10.2012, 14:43 4
Ну чтобы автоматически массив раскрывался, то напрямую не получится (либо что-то хитроумное кодить, но не знаю, стоит ли оно того).
Если массив небольшой, то можно просто добавить в watch каждый элемент array[0], array[1] и т.д. Если большой - добавлять только интересущие элементы.
0
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 20
01.10.2012, 20:48  [ТС] 5
Цитата Сообщение от John Prick Посмотреть сообщение
Ну чтобы автоматически массив раскрывался, то напрямую не получится (либо что-то хитроумное кодить, но не знаю, стоит ли оно того).
Если массив небольшой, то можно просто добавить в watch каждый элемент array[0], array[1] и т.д. Если большой - добавлять только интересущие элементы.
Спасибо. Хотя все равно непонятно, почему статические массивы можно просматривать по ссылке (имени), а динамические - нет.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
01.10.2012, 22:28 6
Цитата Сообщение от Владимир 1 Посмотреть сообщение
А можно как-нибудь просмотреть сам динамический массив в отладчике?
Нельзя, потому как отладчик не знает, какого размера и чего ты там выделял. Для отладчика есть только переменная типа "указатель на int"

Добавлено через 1 минуту
Цитата Сообщение от Владимир 1 Посмотреть сообщение
Хотя все равно непонятно, почему статические массивы можно просматривать по ссылке (имени), а динамические - нет
Статический массив - это переменная типа "массив из стольки-то элементов". А динамический массив - это просто указатель. Вся отладочная информация, записываемая для отладчика - исключительно статическая
0
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
02.10.2012, 00:12 7
Цитата Сообщение от Владимир 1 Посмотреть сообщение
Хотя все равно непонятно, почему статические массивы можно просматривать по ссылке (имени), а динамические - нет.
Хоть уже и ответили, добавлю и я. Когда массив задаётся статически, то его размер указывается явно в квадратных скобках. Вот эту цифирь в этих самых скобках отладчик может узнать, так как информация для отладчика формируется на этапе компиляции (тут я, может быть, не совсем прав, но для первого понимания достаточно). Когда же массив создаётся динамически, то на самом деле создаётся не массив, а вот что:
C++
1
int * array = new int[DynamicN];
Что здесь происходит? А по сути здесь происходит выделение памяти и создание DynamicN переменных типа int (где-то в "куче", лежащие подряд друг за другом) и адрес первой из этих переменных присваивается указателю array. Отладчик не покажет весь массив даже не потому, что не знает, чему будет равно DynamicN в момент создания, а потому, что для него нет того объекта, который он может показать (имеем в виду массив), а есть только именованый указатель array.
Вот такое объяснение перед сном Надеюсь, стало немного понятнее.
2
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.10.2012, 00:15 8
Цитата Сообщение от John Prick Посмотреть сообщение
так как информация для отладчика формируется на этапе компиляции (тут я, может быть, не совсем прав, но для первого понимания достаточно)
Абсолютно прав
2
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
02.10.2012, 00:20 9
Цитата Сообщение от Владимир 1 Посмотреть сообщение
А можно как-нибудь просмотреть сам динамический массив в отладчике?
В памяти можешь посмотреть.
Для int, как пример, можно посмотреть в памяти элементы по порядку в их десятичном виде:
Почему при создании динамического массива, отладчик видит только один первый элемент?
1
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 20
02.10.2012, 01:00  [ТС] 10
Спасибо всем за подробное объяснение.
Нехорошо, правда, получается: мы что-то где-то создаем, работаем с этим, а отследить не можем.
Ну а в памяти копаться - это уж если совсем плохо будет
0
419 / 381 / 163
Регистрация: 03.01.2013
Сообщений: 966
03.12.2013, 19:04 11
Посмотреть первые N значений массива можно, если в окне контролируемых значений написать x, N

Почему при создании динамического массива, отладчик видит только один первый элемент?
3
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.12.2013, 19:56 12
Цитата Сообщение от monochromer Посмотреть сообщение
Посмотреть первые N значений массива можно, если в окне контролируемых значений написать x, N

Вложение 336611
И как это сделать? x - это что? Указатель?
0
419 / 381 / 163
Регистрация: 03.01.2013
Сообщений: 966
03.12.2013, 20:40 13
Цитата Сообщение от alsav22 Посмотреть сообщение
И как это сделать? x - это что? Указатель?
x был создан так:

double* x = new double[8];
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.12.2013, 21:23 14
Цитата Сообщение от monochromer Посмотреть сообщение
если в окне контролируемых значений написать x, N
Цитата Сообщение от alsav22 Посмотреть сообщение
И как это сделать?
Как такую запись сделать в окне контрольного значения?
0
419 / 381 / 163
Регистрация: 03.01.2013
Сообщений: 966
04.12.2013, 08:19 15
Щелкните 2 раза левой кнопкой мыши по названию переменной.
1
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
04.12.2013, 09:43 16
Цитата Сообщение от monochromer Посмотреть сообщение
Щелкните 2 раза левой кнопкой мыши по названию переменной.
Ничего не происходит. Вы уверены, что у вас билдер?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 09:54 17
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы уверены, что у вас билдер?
Я про студию спрашивал. Там работает такой способ.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
04.12.2013, 09:57 18
alsav22, я утрирую. Метод monochromer не панацея.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 10:10 19
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Метод monochromer не панацея
В каком смысле? Не во всех средах работает?
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
04.12.2013, 10:15 20
Цитата Сообщение от alsav22 Посмотреть сообщение
Не во всех средах работает?
Ага. Именно так.
0
04.12.2013, 10:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2013, 10:15
Помогаю со студенческими работами здесь

Поменять первый и максимальный элемент одномерного динамического массива
Помогите пожалуйста, нужно разработать метод-член класса для преобразования одномерного...

Ошибка при создании динамического массива.
Все доброго времени. Начал создавать одномерный массив, потом решил его преобразовать в...

Ошибка при создании динамического массива
При создании динамического массива (матрицы) возникает ошибка Сам процесс создания выведен в...

Ошибка при создании двумерного динамического массива
Нужно создать матрицу (на основе динамики (язык СИ)). В чем ошибка? void main() { int...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru