|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.06.2011, 17:37 | #1 |
Регистрация: 28.06.2011
Сообщений: 3
|
ошибка в работе с динамической памятью
вот часть кода, класс используется для создания динамического массива
для подсчета среднего бала всех студентов. в двух строках где идет выделение памяти логическая ошибка, выручайте.... не могу понять в чем косяк...препод говорит что чтоб понять, нужно рисовать память и как куда что идет.... нужно сдать лабу срочно Код:
Последний раз редактировалось pproger; 28.06.2011 в 22:40. |
28.06.2011, 22:19 | #2 |
Регистрация: 23.06.2010
Сообщений: 9
|
Что за run(m); ?
Последний раз редактировалось MaVaL; 28.06.2011 в 22:22. |
28.06.2011, 22:39 | #3 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
28.06.2011, 22:41 | #4 |
Регистрация: 23.06.2010
Сообщений: 9
|
(1) Marks *m = new Marks;
(2) *m=array[i]; (3) double s; (4)run(m); (5)s=m->averageMark; (6)array[i].averageMark=m->averageMark; (7)sum += s; Так по порядку: (1) - Обьявил указатель и создал объект класса Marks указатель m - указывает, на вновь созданный объект. (2) - Новый объект равен объекту из массива. (4) - неведомая функция, которая возможно меняет член данных averageMark объекта находящегося по указаелю m. Ошибка - после выхода из тела цикла созданы k штук объектов класса Marks. За ними помять не очищена. И указатели на них утеряны. P.S. я бы написал: for ( int i = 0; i < k; i++ ) { Marks m; run(&m); double s=m.averageMark; array[i].averageMark=m.averageMark; sum += s; } На каждой итерации объект создаётся и уничтожается по выходу. |
28.06.2011, 23:00 | #5 |
Регистрация: 28.06.2011
Сообщений: 3
|
run описывается в классе Marks
void run( Marks* marks ) { marks->averageMark = ( (double) marks->firstMark + (double) marks->secondMark + (double) marks->thirdMark ) / 3; } |
28.06.2011, 23:09 | #6 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
Код:
Код:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
28.06.2011, 23:10 | #7 | |
Регистрация: 23.06.2010
Сообщений: 9
|
Цитата:
В таком случае у тебя получится цикл таким: Код:
|
|
28.06.2011, 23:15 | #8 |
Регистрация: 28.06.2011
Сообщений: 3
|
в твоем 1ом варианте Maval выдается направильный ответ, вместо среднего бала выдает -858993000,
поменял for ( int i = 0; i < k; i++ ) sum += array[i].averageMark; ответ все равно -858993000 Последний раз редактировалось thrashkid; 28.06.2011 в 23:26. |
30.06.2011, 00:48 | #9 | ||
Регистрация: 23.06.2010
Сообщений: 9
|
Цитата:
Второй случай не работает. Т.к. ты не изменил констуктор класса. Соответственно у тебя выводилось не инициализированное значение. Цитата:
Код:
Последний раз редактировалось Stilet; 30.06.2011 в 08:06. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка работы с памятью | Alex Cones | Общие вопросы Delphi | 4 | 04.12.2010 06:45 |
Работа с ListBox и Edit и динамической памятью | Serebah | Помощь студентам | 5 | 19.11.2010 13:41 |
Странный баг при работе с разделяемой памятью в C | mephisto123 | Qt и кроссплатформенное программирование С/С++ | 2 | 01.08.2008 18:10 |
Помогите пожалуйста с динамической памятью и указателями | Riddick2013 | Помощь студентам | 1 | 19.12.2007 14:41 |