2010-10-10 3 views
0

У меня возникла странная проблема с указателями. Я создаю дерево kd для трассировки лучей, а во время функции BuildKDtree я печатаю root-> left и root-> right, и я получаю правильные значения для различных атрибутов, хранящихся на узле. В тот момент, когда я заполняю этот код, а затем пытаюсь пересечь дерево, используя указатель исходного корня, значения root-> left и root-> right содержат мусор и сбой кода! Любые предложения относительно того, что может быть причиной этого? Я мог бы вставить код, если это необходимо, но его довольно неуклюжий.Указатель, дающий значения мусора даже после установки

+0

Возможно, это просто недостающее назначение исходному корневому указателю или что-то в этом роде. Если можно, отправьте код. Хорошая идея сделать копию и попытаться обрезать ее до абсолютного уровня. –

ответ

0

Что такое подпись функции BuildKDtree? Возможно ли, что где-то есть указатель, но на самом деле нужен указатель на указатель? Просто пытаюсь угадать :)

+0

Спасибо, arun, на самом деле я думал, что тоже, но я думаю, что его решена сейчас. – Manish

0

Скорее всего, что:

  • Когда вы выделить для корня структура данных, вы на самом деле не получить действительный адрес.
  • Некоторые другие ваши коды (или рамки, с которыми вы работаете) выписываете границы структуры.

Вообще говоря, второй вариант менее вероятен из-за SEGFAULTs, но это не гарантируется, если вы фактически не запустили предыдущие границы страниц. Звучит как неприятная проблема для отладки, попробуйте valgrind :)

0

Не могли бы вы проверить, действительно ли этот указатель?

Возможно, вы что-то вроде этого:

Node n = 0; 
    n->doThat(); 

В данном случае это не будет иметь никакого действительного левый и правый указатели.

0

Спасибо, ребята, указав некоторые возможные условия. Я нашел ошибку. На самом деле я не выделял динамическую память в функции BuildKDtree. Так внутри все работало отлично. Но когда я вернул переменные, они были уничтожены и, следовательно, ошибка.

Смежные вопросы