2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
||||||
1 | ||||||
Массивы указателей и ошибка Access violation reading location17.05.2015, 19:16. Показов 3564. Ответов 19
Метки нет (Все метки)
0
|
17.05.2015, 19:16 | |
Ответы с готовыми решениями:
19
ошибка Access violation reading location 0x00000066 Ошибка: Unhandled exception at 0x772115de in TimeShift.exe: 0xC0000005: Access violation reading location 0x00041000. Ошибка Unhandled exception at 0x001EB509 in Gauss1.exe: 0xC0000005: Access violation reading location 0xCCCCCCD4 access violation reading location |
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
||||||
17.05.2015, 19:23 | 2 | |||||
Number* array[10]; - массив указателей. все они указывают неизвестно куда, поэтому любое обращение к объекту через любой указатель этого массива - это ошибка. надо, чтобы указатели указывали на реальные объекты.
если вы сделаете так, то проблем быть не должно:
который бы явно инициализировал x. не факт что дефолтный инициалиризует нулем
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
||||||
17.05.2015, 19:28 [ТС] | 3 | |||||
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
17.05.2015, 19:37 | 4 |
так происходит, потому что объекты у вас в памяти расположены не последовательно.
указатели в массиве - да. один за другим. но вот то, куда они указывает - эти объекты в памяти разбросаны, т.к. в цикле при инициализации каждый вызов new не обязан выделять память сразу с куском, который был выделен в предыдущей итерации.
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
|
18.05.2015, 19:54 [ТС] | 5 |
Как мне обойти данное ограничение? Все мои попытки привели к неудаче.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
18.05.2015, 23:37 | 6 |
в моем первом сообщении тут есть вариант.
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
||||||
19.05.2015, 21:16 [ТС] | 7 | |||||
ну как я вас понял мне нужно передавать в функцию массив указателей
Добавлено через 25 минут По вашему коду, не получиться выделять память динамически
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
||||||
19.05.2015, 23:41 | 8 | |||||
конечно. там и не проедполагалось выделять ее динамически. если вам непременно надо что-то динамически выделить, то так и написали бы. для решения задачи в этом нет необходимости поэтому пример был самый простой. т.к. непонятно, что и как вам там надо динамически выделять, можете попробовать так:
1
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
||||||
20.05.2015, 22:39 [ТС] | 9 | |||||
Спасибо.
В дальнейшем у меня опять возникли трудности.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
20.05.2015, 22:57 | 10 |
вы бы задание задание хоть описали со всем мракобесием вроде надо, чтобы обязательно динамически что-то выделялось. вот проблемы с массивами возникли из-за того, что вы попытались заложиться на то, что объекты у вас в памяти последовательно находятся. из этого появился код в методе calc. если на calc не наложено каких-то дуратских ограничений, то передавайте туда указатели на указатели. они то как раз последовательно рассположены. в этом случае вариант создания массива из сообщения #3 пройдет. надо будет только немного метод calc изменить. но это опять же закладка на то, что что-то как-то по хитрому в памяти рассположено, что ограничивает использование этого метода => само решение кривое
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
|
20.05.2015, 23:21 [ТС] | 11 |
Задание такое: Сформировать массив объектов и для элемента массива с четным индексом сложить со всеми последующими эле-ментами, а для нечетными сложить со всеми предыдущими элементами.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
||||||
20.05.2015, 23:33 | 12 | |||||
нигде не сказано, что что-то там должно быть динамически создано, что должны быть классы с виртуальными функциями и прочее, из-за чего вы нагенерили столько ненужного кода. вот можно сделать по простому и будет удовлетворять условию:
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
|
20.05.2015, 23:36 [ТС] | 13 |
Я понимаю, что все просто когда делается так. Мне нужно сделать при помощи абстрактного класса, не так просто я себе усложняю жизнь.
Смысл в том, что я вызываю метод calc и он выполняться для четного и нечетного индекса по-разному.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
20.05.2015, 23:38 | 14 |
это троллинг чтоли? задание такое, но мне надо сделать по другому, не скажу как. помогите плиз.
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
|
20.05.2015, 23:42 [ТС] | 15 |
Я скидывал свой код и просил помощи в исправлении ошибок, разве это для вас не нормальное задание?
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
20.05.2015, 23:53 | 16 |
я вам подсказал первый раз как подправить. потом выяснилось, что вам нужно непременно что-то динамически создавать. ок, вроде тоже динамически что-то создалось. потом оказывается надо в массиве хранить указатели на динамически разные типы объектов. я как вроде не спрашивал зачем. потом выяснилось что то, что вы хотите замутить не решаемо в том виде, в котором оно представлено (закладка на рассоложение объектов). ладно, попробовал выяснить задание. в задании ничего не сказано про абстрактные классы, про то, что метод калькуляции должен находится в самом таком объекте. решение было представлено. оно оказалось не тем, т.к. вам оказывается нужны абстрактные классы. для чего - до выяснения этих обстоятельств мы не дошли. давайте я предположим, что вы сказали, что у объектов должна быть виртуальная функция и больше ничего не скажете. ну ок, я вам предложу завести какую-нибудь виртуальную функцию, которая ничего не делает и она даже не будет вызываться. потом вы скажете, для чего же она все-таки вам нужна и мне по новой что-то с этим придумывать надо будет ну и так до тех пор, пока из вас клещами не вытянется то, что вам надо. вместо этого нужно всего-то описать подробно TЗ
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
|
20.05.2015, 23:57 [ТС] | 17 |
Я вас понял. Сформировать массив объектов (значение элемента и действие, реализуемое этим элементом) и для элемента массива с четным индексом сложить со всеми последующими эле-ментами, а для нечетными сложить со всеми предыдущими элементами.При выполнении задания использовать механизм наследования: опи-сать элемент массива как абстрактный базовый класс. Действие, реализуемое элементами массива, реализовать в виде виртуальных методов этого класса.
Надеюсь теперь не будет вопросов по ТЗ?
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
21.05.2015, 00:08 | 18 |
вопросы остались. действие - это что? из предыдущего моего негодования это подпадает под виртуальную функцию, которая в частном случае ничего не делает, но можно сделать так, чтобы что-то бесполезное делала типа печатала на экран что-нибудь. если же действие - это складывание, то тут надо сидеть и думать, т.к. это несколько кривое использование виртуальных функций, какая-то виртуальная функция ради виртуальной функции без здравого смысла.
0
|
2 / 2 / 1
Регистрация: 30.01.2013
Сообщений: 130
|
|
21.05.2015, 00:15 [ТС] | 19 |
Да, к сожалению действие это сложение.
В сообщении #9 я привел примерный вид кода (архитектура такая), я просил помощи лишь в том что бы разобраться как работает арифметика указателей в данном случае (до сих пор не очень понял). Ну и если в этом случае нельзя использовать инкремент и декремент указателей как обойти данный механизм.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
21.05.2015, 00:21 | 20 |
мне пока видится такой вариант:
создается массив указателей на абстрактные классы. далее в цикле под каждый указатель создается конкретный объект. и вот для вашей задумки в конструкторе этому объекту нужно передать указатель на начало этого массива, размер массива и позицию создаваемого объекта в этом массиве. тогда в метод калк ничего передавать не надо. в объекте будет хранится все, что нужно для прохода по массиву вперед или назад и это полная хрень. если это вас устраивает - сделайте. там не сложно. другие варианты в голову не приходят, может кто другой сообразит.
0
|
21.05.2015, 00:21 | |
21.05.2015, 00:21 | |
Помогаю со студенческими работами здесь
20
Access violation reading location Access violation reading location Access violation reading location Помогите с ошибкой Access violation reading location 0x1ed1d9f8. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |