используя библиотеку gSOAP натолкнулся на грабли с генеренными ее средствами файлами, проблему можно свети к такому примеру:
struct my_str
{
my_str() {}
virtual ~my_str() {}
char buf[100000];
};
void copy(my_str* to, const my_str* from)
{
memcpy(to, from, sizeof(my_str));
}
class my_class : public my_str
{
public:
my_class() {}
my_class(const my_str& from)
{
//этот вызов корень всех бед
copy(this, &from);
}
// вызов из функции другой виртуальной функции
// по сути вызов виртуальной функции изнутри класса
virtual int f()
{
return x(rand());
}
virtual int x(int j)
{
return j*2;
}
};
int main(int argc, char *argv[])
{
my_class m1;
//убедимся что все работает
m1.f();
my_str str;
my_class m2(str);
//вызов x из вне - все работает
m2.x();
// А вот тут core dump получаем на вызове my_class::x
m2.f();
return 0;
}
есть идеи как это объяснить?
P.S. если вызов copy перенести в конструктор копирывания my_str, то все работает замечательно!!!