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

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

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

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

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

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

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


Цитата Сообщение от CyBOSSeR Посмотреть сообщение
C++
1
2
 char * temp = new char [10];
temp[9] = '\0';
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2010, 23:36     Массивы Мистика, 2008 VS, C++
Еще ссылки по теме:

C++ Массивы структур, массивы векторов
Какая-то мистика с if C++
C++ Если проект создала в Visual C++ Express 2008, он должен запуститься просто в VS 2008?
Мистика при удалении из бинарного дерева поиска ! C++
Многомерные массивы, как перебирать внутренние массивы C++

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

Или воспользуйтесь поиском по форуму:
Mescalito
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 15
26.04.2010, 23:36  [ТС]     Массивы Мистика, 2008 VS, C++ #7
буду знать, еще раз спасибо.
Yandex
Объявления
26.04.2010, 23:36     Массивы Мистика, 2008 VS, C++
Ответ Создать тему
Опции темы

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