|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
||||||
Запись значения в динамический массив18.08.2011, 00:37. Показов 5376. Ответов 18
Метки нет (Все метки)
Добрый вечер,
Сел я на ночь глядя писать программу, но вот проблема
Заранее спасибо!
0
|
||||||
| 18.08.2011, 00:37 | |
|
Ответы с готовыми решениями:
18
|
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
|
| 18.08.2011, 00:49 | |
|
*(tempnum3+s+1) -- это Вы уже не в массив пишете.
tempnum3 изначально содержит адрес элемента tempnum3[0]. tempnum3[s+1] -- это уже за границами массива. Последний элемент -- это tempnum3[s]: учитывайте, что вы выделили память под s+1 элементов, включая нулевой. Соответственно, указатель на последний элемент --- это tempnum3 + s. P.S. И не забывайте смещать указатель, а то у вас в цикле s не меняется и получается, что пишете в один и тот же элемент.
0
|
|
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
||||||
| 18.08.2011, 01:01 [ТС] | ||||||
P.S. s у меня меняет значения мне просто нужно написать одно z и все
0
|
||||||
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
||||||
| 18.08.2011, 01:08 | ||||||
|
Если Вы хотите на каждом шаге цикла писать z в последний элемент массива tempnum3, то, да
Остальная логика программы мне не совсем понятна. Например, я раньше нигде не видел подобного синтаксического описания конструкции switch - case
0
|
||||||
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
|
| 18.08.2011, 01:10 [ТС] | |
|
Я просто пишу калькулятор который обрабатывает данные в момент ввода
Это просто кусок Огросного кода с праработанным арифметическим синтаксисом и т.д. ________________________________________ _______________________________________ Почему-то проблема осталась и все равно не пишется значение z.
0
|
|
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
|
| 18.08.2011, 01:23 | |
|
В общем, чисто новичковское имхо:
char *tempnum3 = new char[s+1]; при s = 0 выделяет место под один int. Соответственно, указатель tempnum3+s при s, отличных от нуля, указывает уже не на массив. Валидным будет лишь указатель tempnum3.
0
|
|
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
|
| 18.08.2011, 01:31 [ТС] | |
|
То есть как правильно написать?
0
|
|
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
|||||||||||||||||||||
| 18.08.2011, 01:43 | |||||||||||||||||||||
|
Ну по сути что происходит: Вы устанавливаете s = 0 и выделяете память под s+1 == 1 элемент:
Поправьте
Добавлено через 2 минуты Хочу добавить, что при s == 0 запись tempnum3+s равносильна просто tempnum3. Если Вы изменяете s после строчки
0
|
|||||||||||||||||||||
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
|
| 18.08.2011, 01:44 [ТС] | |
|
Поправил, точнее я и так это сделал, но все равно не идет запись
0
|
|
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
|
| 18.08.2011, 01:49 | |
|
Вы уверены, что код доходит до этой строчки, а не обрубается на ложности проверок case'ов?
0
|
|
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
||||||
| 18.08.2011, 01:51 [ТС] | ||||||
|
вроде доходит, вот полный код
0
|
||||||
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
||||||
| 18.08.2011, 02:01 | ||||||
|
Короче, вся проблема в том, что Вы выделяете некорректное количество памяти.
P.S. Я сам новичок, поэтому могу ошибаться.
0
|
||||||
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
|
| 18.08.2011, 02:04 [ТС] | |
|
Возможно, ладно буду думать дальше, а так, если есть еще предложения пишите.
Вообще, если Вы протестируйте, то увидите что с *tempnum = new char[k]; все нормально, так что я думаю, что проблема в другом
0
|
|
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
||||||||||||
| 18.08.2011, 02:16 | ||||||||||||
|
Я, к сожалению, не могу подебажить Ваш проект --- у меня стоит VS 2010 и при компиляции выкидывает ошибку про отсутствие VS 2008.
Мой совет --- разберитесь, сколько именно элементов должно быть у Вас в массивах и в соответствии с этим сделайте их корректное объявление. При обходе циклов следите, не пишите ли Вы за границы этих массивов. Добавлено через 6 минут
0
|
||||||||||||
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
|
| 18.08.2011, 02:18 [ТС] | |
|
Вообще *tempnum = new char[k];
ведет себя нормально даже при больших значениях
0
|
|
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
|||||||||||||
| 18.08.2011, 02:23 | |||||||||||||
|
Вот выдержка про минимальный блок:
0
|
|||||||||||||
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
|
| 18.08.2011, 02:28 [ТС] | |
|
Не это я проверил и по замыслу программы оно не должно выйти за рамки, как и все остальное
0
|
|
|
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
|
|||||||||||
| 18.08.2011, 02:57 | |||||||||||
|
Ну как же не выходит за рамки массива, когда Вы пишете
Это не решит сразу Вашу проблему с записью z, но решит проблемы, связанные с тем, что Вы некорректно выделяете память. Добавлено через 11 минут А запись в корректно объявленные массивы дебажить куда проще.
0
|
|||||||||||
|
3 / 3 / 3
Регистрация: 24.03.2011
Сообщений: 99
|
|
| 18.08.2011, 13:10 [ТС] | |
|
Мда, посидел немного, а решения все равно не нашел...
0
|
|
| 18.08.2011, 13:10 | |
|
Помогаю со студенческими работами здесь
19
Запись в одномерный динамический массив Запись в динамический массив с файла Двумерный динамический массив и запись в него Посимвольная запись из консоли в динамический массив Считывание ячеек из StringGrid и запись их в динамический массив C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|