LINUX.ORG.RU

[угар][трэш] vtables шарятся как статические переменные для классов с одинаковым именем


0

1

«Вкратце» проблема описана здесь: http://stackoverflow.com/questions/8851931/call-to-virtual-method-crashes-whe...

В общем если в lib1 и lib2 есть классы с одинаковым именем ClassName, но с разным набором виртуальных функций, то (я так думаю) возможна ситуация, когда используется неверная vtable. Конкретно, segfault при вызове методов при приведении к базовому классу, но, полагаю, возможны варианты.

Честно говоря, не думал, что vtable рассматривается как статическая переменная и линкуется по таким же правилам, т.е. если одинаковое имя, будет только одна копия (а код, рассчитывающий на другую, получит крэш).

Вопрос такой, как это задетектить и/или избежать этого? Ну и вообще, кто что умного скажет. Я пока в ах.. ахреневании.

★★★★★

Последнее исправление: queen3 (всего исправлений: 1)

Вопрос такой, как это задетектить и/или избежать этого?

-Wall и не называть классы по-идиотски?

shty ★★★★★
()

Вопрос такой, как это задетектить и/или избежать этого? Ну и вообще, кто что умного скажет. Я пока в ах.. ахреневании.

Пространства имён?

Deleted
()
Ответ на: комментарий от queen3

пройтись простейшим перловым скриптом по исходникам? )

DELIRIUM ☆☆☆☆☆
()

Если есть два разных определения одного класса, глюки будут далеко не только из-за виртуальной таблицы.

const86 ★★★★★
()
Ответ на: комментарий от queen3

попробуй обернуть в namespace'ы

как вариант можно попробовать заюзать другой конпелятор (ну или там поиграться с разными версиями gcc), но это путь настоящего «воена», причём без гарантированного результата

shty ★★★★★
()
Ответ на: комментарий от shty

путь настоящего «воена», причём без гарантированного результата

Ты ж питонщик, у вас это считается нормальным.

lovesan

anonymous
()
Ответ на: комментарий от anonymous

Я тебя предупреждал? Еще раз подпишешься мной - вычислю по айпи, приеду к тебе домой и вставлю пиздюлей.

anonymous
()
Ответ на: комментарий от anonymous

Еще раз подпишешься мной - вычислю по айпи, приеду к тебе домой и вставлю пиздюлей.

Неа, ты не lovesan.

// Тоже не lovesan

anonymous
()
Ответ на: комментарий от anonymous

я настоящий

и мне вот интересно, какому пидарасу пришла в голову идея подписываться мной?

anonymous
()

Вот! Вот этот самый случай (одинаковые имена классов в различных единицах трансляции), когда могут понадобиться анонимные неймспэйсы! Наконец я его узрел! )))

anonymous
()
Ответ на: комментарий от anonymous

Не, это не тот случай. Просто чуваки генерируют один и тот же хидер, но с разными методами. Для разных либ типа. В одном из хидеров для класса методы и данные, а в другом - только методы. Но когда подключаются _обе_ либы...

Не тот случай, потому что «так положено», никаких там нэймспейсов...

queen3 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.