Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Solaris上修复SIGBUS_C++_Memory_Solaris - Fatal编程技术网

C++ 如何在Solaris上修复SIGBUS

C++ 如何在Solaris上修复SIGBUS,c++,memory,solaris,C++,Memory,Solaris,我在64位Solaris上使用的是atomic_inc_64_nv,返回值被强制转换为无符号long。 但当我运行我的应用程序时,它崩溃了,core坚持认为崩溃的原因是SIGBUS。我怀疑可能存在对齐问题。我如何解决这个问题 这是我使用增量的函数 inline unsigned long long Increment64(volatile unsigned long long * pullTarget) { #if defined(LINUX) return Ad

我在64位Solaris上使用的是
atomic_inc_64_nv
,返回值被强制转换为无符号long。 但当我运行我的应用程序时,它崩溃了,core坚持认为崩溃的原因是SIGBUS。我怀疑可能存在对齐问题。我如何解决这个问题

这是我使用增量的函数

    inline unsigned long long Increment64(volatile unsigned long long * pullTarget)
    {
#if defined(LINUX)
        return Add64(pullTarget, 1ULL);
#elif defined(SOLARIS)
        return atomic_inc_64_nv((volatile unsigned long *)pullTarget) - 1ULL;
#elif defined(WIN32)
        return (unsigned long long)InterlockedIncrement64((LONGLONG volatile*)(pullTarget)) - 1ULL;
#endif // defined(LINUX)
    }

提前感谢您。

Sparc处理器不支持未对齐的访问。您需要确保您的
pullTarget
与8字节对齐。您可以添加如下代码来捕获它:

if((uint_ptr)pullTarget和7) { printf(“对齐问题pullTarget=%p\n”,pullTarget);
}Sparc处理器不支持未对齐的访问。您需要确保您的
pullTarget
与8字节对齐。您可以添加如下代码来捕获它:

if((uint_ptr)pullTarget和7) { printf(“对齐问题pullTarget=%p\n”,pullTarget);
}

由于您有一个内核并在调试器中打开了它,现在只需打印变量
pullTarget
中包含的值即可。(指针值本身,而不是它所指向的值。)您应该看到它不能被8整除,因为@MatstPetersson的原因是正确的。

由于您有一个核心并在调试器中打开了它,现在只需打印变量
pullTarget
中包含的值即可。(指针值本身,而不是它指向的对象。)您应该看到它不能被8整除,因为@MatstPetersson的原因是正确的。

您是否尝试过调试器?没有代码,就很难帮助您。请提供一个。请查看上面发布的函数。是否尝试了调试器?没有代码,就很难帮助您。请提供一个。请查看上面发布的函数。最有可能的错误将出现在调用此函数的任何地方。最有可能的错误将出现在调用此函数的任何地方。