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

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

Войти
Регистрация
Восстановить пароль
 
Mescalito
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 15
#1

Массивы Мистика, 2008 VS, C++ - C++

26.04.2010, 23:12. Просмотров 426. Ответов 6
Метки нет (Все метки)

Вобщем вопрос к людям сведущим, как вышло что строчка
C++
1
char * temp = new char [10];
создает массив непонятной длинны никак не равной десяти,
дебаг прилагается на скрине.
0
Миниатюры
Массивы Мистика, 2008 VS, C++  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2010, 23:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы Мистика, 2008 VS, C++ (C++):

Массивы в MS Visual C++ 2008 - C++
Здравствуйте, помогите пожалуйста решить задачу: В журнале группы ежедневно на каждом занятии против фамилии делаются следующие пометки: ...

Одномерные массивы на Visual C++ 2008 : я новичек HELP - C++
Задача №1 Сформировать одномерный массив целых чисел, используя датчик случайных чисел и выполнить задание c использованием индексов: ...

Какая-то мистика с if - C++
Программа работает нормально, но если я убираю проверку в перегрузке оператора + условие if, то функция strcat не склеивает... #include...

Если проект создала в Visual C++ Express 2008, он должен запуститься просто в VS 2008? - C++
Извините за глупый вопрос, просто времени нет устанавливать и проверять( Очень спешу

DrawText win api - Мистика =) - C++
Начинал изучать C++ на FreeBSD, собирал мейкфайлы и горя не знал. Полез в винде разбираться с её API, и начался дурдом. Вот код. Интересует...

Мистика ? - Хранимые процедуры & VC++ (ADO) - C++
Что то я совсем ничерта не понимаю!!! Есть хранимая процедура типа(даже такой упрощенный код не работает): /* просмотр объектов...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
26.04.2010, 23:15 #2
Mescalito, она создаёт указатель... а поскольку символа конца строки нету , вам дебаг пишет ещё всякий мусор... из соседних ячеек памяти... наверно так
1
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.04.2010, 23:17 #3
Цитата Сообщение от GAME Посмотреть сообщение
Mescalito, она создаёт указатель... а поскольку символа конца строки нету , вам дебаг пишет ещё всякий мусор... из соседних ячеек памяти... наверно так
Даже не наверно, а так.
Mescalito, попробуй:
C++
1
2
char * temp = new char [10];
temp[9] = '\0';
1
Mescalito
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 15
26.04.2010, 23:32  [ТС] #4
Большое спасибо, символ конца строки помог, но всетаки непонятно почему масив создается непонятной длинны, ведь дело не только в отображении дебага , я вполне себе могу работать с 12 тым или 15 тым элементом 10 элементного массива, и такой расклад крайне неудобен в случае когда требуется,скажем передать масив целиком в качестве аргумента да и в других случаях такой мусор малоприятен.
Выходит всегда когда требуется массив длинны i , в i тый элемент нужно писать конец строки?
0
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.04.2010, 23:35 #5
Цитата Сообщение от Mescalito Посмотреть сообщение
Выходит всегда когда требуется массив длинны i , в i тый элемент нужно писать конец строки?
Именно так. Благодаря этому можно легко определить длину передаваемой строки в вызываемой функции.
0
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
26.04.2010, 23:36 #6
Цитата Сообщение от Mescalito Посмотреть сообщение
но всетаки непонятно почему масив создается непонятной длинны, ведь дело не только в отображении дебага , я вполне себе могу работать с 12 тым или 15 тым элементом 10 элементного массива, и такой расклад крайне неудобен в случае когда требуется,скажем передать масив целиком в качестве аргумента да и в других случаях такой мусор малоприятен.

Цитата Сообщение от GAME Посмотреть сообщение
она создаёт указатель... а поскольку символа конца строки нету , вам дебаг пишет ещё всякий мусор... из соседних ячеек памяти...
тот мусор из соседних ячеек памяти к вашему массиву отношения не имеет, и лучше всё таки не использовать больше памяти чем просили. Просто ставьте в конце выделенного вами массива символ конца строки , таким образом вы будете контролировать выход за его пределы.


Цитата Сообщение от CyBOSSeR Посмотреть сообщение
C++
1
2
 char * temp = new char [10];
temp[9] = '\0';
0
Mescalito
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 15
26.04.2010, 23:36  [ТС] #7
буду знать, еще раз спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2010, 23:36
Привет! Вот еще темы с ответами:

Мистика при удалении из бинарного дерева поиска ! - C++
Привет народ !) Пытаюсь создать функцию удаления листа из бинарного дерева поиска : template<typename NODETYPE> void...

При переустановке Server 2008 вместо 2012 не правильно определяются RAID массивы - Windows Server
Уважаемые Гуру! Пробую установить Windows Server 2008 вместо Server 2012. В последнем было 2 RAID 0 массива - один 890 Гб, второй 4 Тб. ...

Отличие VS 2008 от VS 2008 в SQL Server 2008 - SQL Server
Здравствуйте только начал изучать SQL! До этого работал в Visual Studio 2008(с++) и установил SQL Server 2008 В него входит пакет...

Мистика в Qt - C++ Qt
Привет. Необходимо через Вконтакте апи получить список друзей и поместить на экран. ItemFriendView - класс QWidget, служит для...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.04.2010, 23:36
Ответ Создать тему
Опции темы

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