|
12 / 8 / 2
Регистрация: 14.01.2015
Сообщений: 31
|
||||||||||||||||
2-мерные массивы: Вызов конструктора портит данные в других экземплярах11.03.2015, 01:07. Показов 928. Ответов 7
Метки нет (Все метки)
Проблема: обнаружилось, что порой пропадают числа из существующих экземпляров класса. Числа (коллективно -- строками или колонками) заменяются на большие числа 3412341232, видимо, адреса. Портятся те массивы, которые переданы в функцию, и казалось бы, не должны изменяться.
TOC -Подробности -Случай 1: вызов конструктора другого экземпляра портит исходный экземпляр, -Случай 2: внутри функции экземпляр не испорчен, сразу же после нее -- испорчен. Подробности: Создаю класс (далее nlNodeList) для работы с двумерными целочисленными массивами и посторонние функции, работающие с экземплярами класса -- например, выделение строки массива, склеивание блоков и прочие. Двумерный массив реализован через указатели. Функции принимают массивы как аргумент и возвращают объект класса.
Поодиночке каждая функция работает нормально, возращает объекты класса, содержащие ожидаемые числовые значения. Случай 1.
после -- все числовые значения равны по умолчанию, как задается при инициализации конструктором (скажем, это 9). arg_nlA -- Поведение программы повторяется. Случай 2.
В отличие от первого случая, от выполнения конструктора экземпляра того же класса nlResult1 на строке 6 ничего не портится. Внутри функции FunctionTwo на 8 строке также ничего не портится, arg_F выводится неизменным. Однако, по выходу из FunctionTwo она внезапно оказывается с испорченной первой строкой. До строки 9 arg_nlA -- после -- испорчена первая строка arg_nlA -- Затем программа вызывает APPCRASH и продолжения не следует. Вопрос: Как сохранять конкретные числа на своих местах? Как не допускать того, чтобы числовые значения, хранящиеся в экземплярах класса, сами по себе внезапно не заменялись на адреса, нули? Задание учебное по рекурсивному разложению логических выражений. Поскольку будет использована рекурсия, то без многократных вызовов функций друг из друга, последовательных вызовов функций с одним экземпляром в качестве аргумента и возврата функциями объектов класса не обойтись. Трудно внятно сформулировать проблему. В прикрепленных темах ответа не нашел. Заранее спасибо.
0
|
||||||||||||||||
| 11.03.2015, 01:07 | |
|
Ответы с готовыми решениями:
7
Вызов конструктора из конструктора и проверка правильности передаваемых параметров
2х мерные массивы |
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
|
|||||||
| 11.03.2015, 08:37 | |||||||
Нужен код целиком.
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 11.03.2015, 08:55 | |
|
Cene-O-Ralle, конструктор копирования и оператор присваивания, где они?
![]() А вообще да, нужен код целиком.
0
|
|
|
12 / 8 / 2
Регистрация: 14.01.2015
Сообщений: 31
|
|||||||||||
| 11.03.2015, 13:28 [ТС] | |||||||||||
|
Всего: myprj.cpp, myprj.hpp, part1.txt.
* Код главного файла myprj.cpp: Кликните здесь для просмотра всего текста
Добавлено через 3 минуты * Код myprj.hpp Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
12 / 8 / 2
Регистрация: 14.01.2015
Сообщений: 31
|
|||||||||||
| 11.03.2015, 13:34 [ТС] | |||||||||||
|
Продолжение
Кликните здесь для просмотра всего текста
Чтение идет из текстового файла part1.txt, в котором: первая строка = число переменных (будет использовано как listWidth - ширина массива), вторая строка = число последущих строк (будет listLength - длина массива), первые цифры в каждой строке = число непустых элементов в этой строке. Числа дают индексы непустых переменных. Кликните здесь для просмотра всего текста
Копия во вложении.
0
|
|||||||||||
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
|
|||||||
| 11.03.2015, 14:37 | |||||||
|
После исправления ошибок компиляции у меня программа слетает на строке
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||||||
| 11.03.2015, 16:31 | |||||||||||
|
Cene-O-Ralle, в целом, как я и говорил, необходимо добавить классу конструктор копирования и оператор присваивания. Ты ими в программе активно пользуешься, но при это не определил. А оператор и конструктор, сгенерированные компилятором по умолчанию, не в курсе про то, как правильно копировать твой объект класса nlNodeList. Поэтому выполняется простое почленное копирование, что в итоге означает разделение владение ресурса между разными объектами, попытка двойного освобождения памяти и многие другие неприятности.
Кликните здесь для просмотра всего текста
Идея с индексами с единицы - крайне неудачная. По крайней мере такая реализация. Можно было бы инкапсулировать это поведение с помощью методов nlWrite и nlRead, а в остальных местах программы не делать постоянные +1. Добавлено через 6 минут Еще есть ошибка в функции ANDBlockAndLine.
0
|
|||||||||||
|
12 / 8 / 2
Регистрация: 14.01.2015
Сообщений: 31
|
|
| 21.03.2015, 18:51 [ТС] | |
|
Спасибо за помощь.
Исправил, но APPCRASH не побежден. Не до конца понимаю: откуда компилятору становится нужен конструктор копирования и оператор присваивания, если я их не вызывал и пользовался числ. значениями в суррогатном копировании CloneNodeList ? -- или же содержимое объекта nlNodeList arg_nlA в нем передавалось как указатели по непониманию?
0
|
|
| 21.03.2015, 18:51 | |
|
Помогаю со студенческими работами здесь
8
Вызов конструктора из конструктора - ошибка Одномерный и двух мерные массивы
1- и 2-мерные массивы. Описание полей и переменных. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|