您好我在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;
}
}
}
任何人都可以帮我解决这个问题。 谢谢,
答案 0 :(得分:0)
您将它放在堆栈而不是堆上,AIX不是它的粉丝。
声明一个指针* _smuArray并在你的construtor中使用它作为_smuArray = new type [i],它应该将它全部涂到堆中。不要忘记在析构函数中放入delete [] _smuArray和_smuArray = NULL。我昨晚花了3个小时才发现这个:)
如果将代码放在main()中,您可能会发现代码工作正常。这是那些愚蠢的AIX之一。