0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
|
1 | |
Не изменяется элемент вектора при работе с ним по указателю07.06.2013, 21:31. Показов 1870. Ответов 16
Метки нет (Все метки)
Здравствуйте. Проблема следующая. Пишу свою велосипедную (на это, как на источник проблемы, не указывать) реализацию бинарного дерева для своего не менее велосипедного архиватора, использующего алгоритм Хаффмана. Составление нового кода для каждого символа происходит в отдельной функции, которая в качестве аргумента принимает указатель на структуру соответствующего символа. Структуры хранятся в специальном векторе. Однако, происходит так, что изменение структуры в функции никак не влияет на нее же в векторе (см. скриншот). Нахожусь в полной расстерянности, помогите, пожалуйста, разобраться.
0
|
07.06.2013, 21:31 | |
Ответы с готовыми решениями:
16
В каждом столбце матрицы найти минимальный и следующий за ним элемент принять в качестве элемента вектора HDD отключается при работе с ним Push_back вектора по указателю - возможно ли Передача вектора в функцию по указателю |
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
||||||
07.06.2013, 22:18 [ТС] | 3 | |||||
0
|
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
|
07.06.2013, 22:47 [ТС] | 5 |
Потому что node в момент выполнения функции указывает на этот элемент. Идентичность содержимого этого указателя и элемента с индексом 3 очевидна.
0
|
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
||||||
07.06.2013, 23:25 [ТС] | 7 | |||||
Да. В коде изменения переменной во время выполнения программы вы не увидите. На скриншоте идентичность показана розовой и оранжевой черточками. То, что указатель в запечатленный момент указывает на этот элемент показано красной и фиолетовой черточками. Плюс ко всему, проблемный участок кода также виден на скриншоте. Из остального кода к этой функции (помимо вызова) относится только то, что вектор nodes объявлен глобально, чтобы я мог просматривать его содержимое.
Добавлено через 9 минут Ну, точнее розовая показывает как раз отличие. Вместо newByte сравните переменные freq. Добавлено через 5 минут Вектор nodes - изменяемый вектор. Хотя, в любом случае я должен был сделать это раньше:
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
07.06.2013, 23:29 | 8 |
Я не про изменение, а про очевидность идентичности писал.
Чёрточки же вы рисовали. Кроме чёрточек, ещё что-либо указывает на то, что указатель в данный момент связан именно с этим элементом? Что с теми элементами, которые до него в функцию передавались (с индексом 0, 1, 2)? Как с ними дело обстояло? Так же? Ошибок в куске кода я не вижу. Если сможете выложить весь код, то попытаюсь найти причину.
0
|
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
|
07.06.2013, 23:38 [ТС] | 9 |
Отредактировал.
Добавлено через 4 минуты Эти черточками я хотел показать, что указатель node имеет такой-то адрес, в содержимом по которому есть символ i, имеющий отношение только к одному элементу в векторе. Нулевой элемент вектора (который не видно в скрине) nodes пустой (строка 83 в коде) и вообще не используется по той причине, что адрес нулевого элемента отчего-то меняется в процессе выполнения программы. Добавлено через 2 минуты С ними та же ситуация.
0
|
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
|
07.06.2013, 23:52 [ТС] | 11 |
Есть такое Но это непонятное устранено (не нулевые элементы вектора свои адреса во время выполнения программы не меняют), так что решил не упоминать.
Добавлено через 4 минуты
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
08.06.2013, 00:01 | 12 |
Не по теме: Я по поводу С++ 11 написал потому, что у меня среда не понимает С++ 11. Файл можете выложить, который используете в коде? Добавлено через 1 минуту Это только больше всё запутывает.
0
|
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
|
08.06.2013, 00:04 [ТС] | 13 |
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
08.06.2013, 02:48 | 14 | |||||
Если так:
1
|
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
|
08.06.2013, 15:46 [ТС] | 15 |
0
|
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
|
||||||
08.06.2013, 16:04 [ТС] | 17 | |||||
Да, я вот так сделал:
0
|
08.06.2013, 16:04 | |
08.06.2013, 16:04 | |
Помогаю со студенческими работами здесь
17
Заменить максимальный элемент изначального вектора на первый минимальный элемент изначального вектора Заменить элементы вектора, равные максимальному, на последний элемент вектора Вывести элемент вектора на пересечении двух элементов этого вектора Найти произведение максимального элемента вектора X на минимальный элемент вектора Y. Определить количество положительных элементов вектора С(10) и заменить этим значением минимальный элемент вектора А(5) Из суммы положительных элементов вектора вычесть сумму отрицательных, найти наибольший элемент вектора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |