Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2012, 15:31   #1
Green Gin
Пользователь
 
Аватар для Green Gin
 
Регистрация: 05.11.2011
Сообщений: 21
Лампочка

Здравствуйте. Имеется приблизительно следующий простой фрагмент кода:
Код:
struct tree {
// некоторые ключевые переменные
  struct tree *parent, *left, *right;
} *root, *clamp;

root = (struct tree*)malloc(sizeof(struct tree));
clamp = root; 
/* в программе clamp - некий фиксатор(обозреватель узла), 
перемещающийся по бинарному дереву
(то есть - указатель, постоянно меняющий хранимый адрес)*/

clamp->left = (struct tree*)malloc(sizeof(struct tree));
clamp->right = (struct tree*)malloc(sizeof(struct tree));

clamp->left->parent = clamp;
clamp->right->parent = clamp;
Из-за последних двух строк программа после запуска прекращает своё выполнение.
Не пойму: почему?
Как мне присвоить указателю parent дочерних узлов двоичного дерева адрес родительского узла?

Ну хотя бы предположениями подсуетитесь, пожалуйста
-=-=-=-=-|?|-=-=-=-=-

Последний раз редактировалось Stilet; 01.04.2012 в 18:04.
Green Gin вне форума Ответить с цитированием
Старый 01.04.2012, 17:09   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Кто-ж его знает...
В приведенном отрывке у меня ничего не падает, что-то Вы скрываете.
root->parent не инициализируется и может позже устроить облом.
А может Вы потом освобождаете память free(root); free(clamp);
не обращая внимание что это указатели на один блок памяти.
Ошибку-то какую выдает?
EUGY вне форума Ответить с цитированием
Старый 01.04.2012, 17:45   #3
Green Gin
Пользователь
 
Аватар для Green Gin
 
Регистрация: 05.11.2011
Сообщений: 21
По умолчанию

Ошибка не компилятора, просто при запуске "работа программы прекращена"...
-=-=-=-=-|?|-=-=-=-=-
Green Gin вне форума Ответить с цитированием
Старый 01.04.2012, 17:48   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Запуск в debug из-под отладчика?
EUGY вне форума Ответить с цитированием
Старый 01.04.2012, 17:49   #5
Green Gin
Пользователь
 
Аватар для Green Gin
 
Регистрация: 05.11.2011
Сообщений: 21
По умолчанию

Весь код выкладывать муторно (около 400 строк), но ошибка именно в данном фрагменте. При комментировании двух последних строчек программа не завершает аварийно работу...

Да. При нажатии F5 в Visual Studio компилятор стал ругаться: Необработанное исключение в "0x011d267e" в "vagrant_deale.exe": 0xC0000005: Нарушение прав доступа при записи "0x0051d590".
-=-=-=-=-|?|-=-=-=-=-

Последний раз редактировалось Stilet; 01.04.2012 в 18:06.
Green Gin вне форума Ответить с цитированием
Старый 01.04.2012, 17:57   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ну а пошагово F10, F11 пройтись...
EUGY вне форума Ответить с цитированием
Старый 01.04.2012, 17:59   #7
Green Gin
Пользователь
 
Аватар для Green Gin
 
Регистрация: 05.11.2011
Сообщений: 21
По умолчанию

Причём выполнение программы прекратилось (неожиданно для меня) после выше приведенного фрагмента кода, на фрагменте (если конечно этот кусок даст что знать):
Код:
for(unsigned i = 0; i < size; i++)
	{
		clamp->left->matrix[clamp->left->zero[0]][i] = -1;  
		clamp->left->matrix[i][clamp->left->zero[1]] = -1; //вот здесь точка останова 
	}
Тоже самое...
Код:
Необработанное исключение в "0x011d267e" в "vagrant_deale.exe": 0xC0000005: Нарушение прав доступа при записи "0x01a0d590".
Что это может хоть быть?
-=-=-=-=-|?|-=-=-=-=-

Последний раз редактировалось Stilet; 01.04.2012 в 18:06.
Green Gin вне форума Ответить с цитированием
Старый 01.04.2012, 18:06   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Перед крахом смотрите состояние всех Ваших переменных в окнах типа watch
Может наткнетесь на недействительный указатель.
EUGY вне форума Ответить с цитированием
Старый 01.04.2012, 18:14   #9
Green Gin
Пользователь
 
Аватар для Green Gin
 
Регистрация: 05.11.2011
Сообщений: 21
По умолчанию

можно по подробней или ссылку на информацию
-=-=-=-=-|?|-=-=-=-=-
Green Gin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление элемента в бинарном дереве Kukurudza Общие вопросы C/C++ 1 26.06.2011 22:51
Расчет уровней в бинарном дереве holi10 Общие вопросы C/C++ 0 01.06.2011 18:22
Посчитать количество вершин в бинарном дереве goo Фриланс 2 26.02.2011 20:01
Поиск в бинарном дереве не по ключу lebrosha Помощь студентам 2 26.05.2009 15:32
Удаление вершины в бинарном дереве lebrosha Помощь студентам 2 24.05.2009 13:51