【问题标题】:C++ Segmentation fault in AIXAIX 中的 C++ 分段错误
【发布时间】:2023-03-12 14:15:02
【问题描述】:

您好,我在 AIX 6 上用 C++ 编写了一段代码,作为我项目的一部分,如下所示: 它可以正确编译和构建。但是在执行以下行时出现分段错误, "EquipmentSMU _equipmentSMU=_smuArray[i];"

我正在使用 bjam 构建它,并使用 -bmaxdata:0x80000000 选项链接所有库。 我在执行之前尝试了 export $LDR_CNTRL=MAXDATA=0x80000000 但无法解决问题。

我在 Windows 中运行了相同的代码,它运行良好,没有任何问题。

我的代码:

#define EQUIP_MAX_SMU_LEN 30
#define EQUIP_MAX_SMU 100
typedef struct
{
    wchar_t _smu[EQUIP_MAX_SMU_LEN+1];

} EquipmentSMU;

class Equipment
{
public:
    Equipment();
    ~Equipment();

private:
    void _AddSMU(wchar_t* smu);

private:
    EquipmentSMU _smuArray[EQUIP_MAX_SMU];
};

void Equipment::_AddSMU(wchar_t* smu)
{
    int i;
    for ( i=0; i < EQUIP_MAX_SMU; i++ )
    {
        EquipmentSMU _equipmentSMU=_smuArray[i];//segmentation fault coming at here
        wchar_t _tempSmu = _equipmentSMU._smu[0];
        if(_tempSmu == L'\0' )
        {
            wcsncpy( _smuArray[i]._smu, smu, EQUIP_MAX_SMU_LEN+1 );
            return;
        }
        if( wcsncmp( _smuArray[i]._smu, smu, EQUIP_MAX_SMU_LEN+1) == 0 )
        {
            return;
        }
    }
}

谁能帮我解决这个问题。 谢谢,

【问题讨论】:

  • 段错误中的i 是什么?
  • 它是0。它发生在迭代的最开始。
  • 我怀疑您的 Equipment 实例已损坏。您是如何创建和使用它的?
  • 我怀疑您将 Equipment 实例分配为局部变量(可能是数组?),这会导致堆栈溢出。请包含代码的相关部分。
  • 抛出异常的那一行的this指针的值是多少?

标签: c++ segmentation-fault aix bjam


【解决方案1】:

您将它放在堆栈而不是堆上,而 AIX 不喜欢这样做。

声明一个指针 *_smuArray 并在你的构造器中使用它作为 _smuArray = new type[i] ,它应该将它分配到堆中。不要忘记将 delete[] _smuArray 和 _smuArray = NULL 放入你的析构函数中。我昨晚花了 3 个小时才找到这个:)

你可能会发现你的代码工作正常,如果你把它放在 main() 中。这是 AIX 中那些愚蠢的事情之一。

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 2016-12-03
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多