gpt4 book ai didi

c++ - quickfix 给出的总线错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:50 25 4
gpt4 key购买 nike

我试图让一个简单的演示 quickfix 程序在 solaris 上运行,即 http://www.codeproject.com/Articles/429147/The-FIX-client-and-server-implementation-using-Qui在让它执行我希望它执行的操作之前。

不幸的是,在 main 中,应用程序在

FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory);

被称为用 gdb 检查核心转储,我看到了

(gdb) where
#0 FIX::SessionFactory::create (this=0xffbfee90, sessionID=@0x101fe8, settings=@0x100e34)
at FieldConvertors.h:113
#1 0xff2594ac in FIX::Initiator::initialize (this=0xffbff108) at stl_tree.h:246
#2 0xff25b270 in Initiator (this=0xffbff108, application=@0xffbff424,
messageStoreFactory=@0xffbff1c4, settings=@0xffbff420, logFactory=@0xffbff338)
at Initiator.cpp:61
#3 0xff25f8a8 in SocketInitiator (this=0xffbff108, application=@0xffbff3c8,
factory=@0xffbff388, settings=@0xffbff408, logFactory=@0xffbff338) at SocketInitiator.cpp:52
#4 0x0004a900 in main (argc=2, argv=0xffbff4c4) at BondsProClient.cpp:42

所以我查看 FieldConverters.h,我们有代码

inline char* integer_to_string( char* buf, const size_t len, signed_int t )
{
const bool isNegative = t < 0;
char* p = buf + len;

*--p = '\0';

unsigned_int number = UNSIGNED_VALUE_OF( t );

while( number > 99 )
{
unsigned_int pos = number % 100;
number /= 100;
p -= 2;
*(short*)(p) = *(short*)(digit_pairs + 2 * pos);
}

if( number > 9 )
{
p -= 2;
*(short*)(p) = *(short*)(digit_pairs + 2 * number); //LINE 113 bus error line
}
else
{
*--p = '0' + char(number);
}

if( isNegative )
*--p = '-';

return p;
}

看到这里,我实际上对这次崩溃并不感到惊讶。它在不检查对齐的情况下取消引用作为短函数传递给函数的 char* 指针,这是未知的。这对任何 C/C++ 标准都是非法的,并且由于 sparc 处理器不能执行未对齐的内存访问,所以它显然会崩溃。我在这里真的很厚吗? quickfix IS(根据他们的网站)应该可以在 solaris sparc 上编译和使用。有谁知道解决这个问题的方法吗?想到将标题编辑为 sprintf 的选项,就像对齐某些东西一样。或者是一个不同的东西导致缓冲区未对齐的红鲱鱼?

最佳答案

如果它由于未对齐的加载/存储而崩溃,那么您可以替换以下行:

*(short*)(p) = *(short*)(digit_pairs + 2 * number);

使用 memcpy 的更安全的等价物:

memcpy((void *)p, (const void *)(digit_pairs + 2 * number), sizeof(short));

关于c++ - quickfix 给出的总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26020723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com