2014-11-17 6 views
-1

안녕하세요, 아래 코드와 같이 프로젝트의 일부로 AIX 6에서 C++ 코드를 작성했습니다 : 컴파일되고 빌드됩니다. 아래 라인 실행시 세그먼테이션 오류가 발생했습니다. "EquipmentSMU _equipmentSMU = _smuArray [i]; "AIX에서 C++ Segmentation 오류

저는 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

segfault에 'i'가 무엇입니까? –

+0

그것은 0. 반복의 맨 처음에 발생합니다. – user2185374

+2

'장비'인스턴스가 고장 났다고 생각합니다. 어떻게 그것을 만들고 사용하고 있습니까? – molbdnilo

답변

0

힙 대신 스택에 넣으므로 AIX에는이 팬이 없습니다.

* _smuArray 포인터를 선언하고 construtor에서 _smuArray = new type [i]로 사용하여 힙에 모두 적용해야합니다. 소멸자에 delete [] _smuArray 및 _smuArray = NULL을 넣는 것을 잊지 마십시오. 지난 밤에 3 시간을 보냈다. :)

main()에 넣으면 코드가 정상적으로 작동하는 것을 볼 수있을 것입니다. 그것은 바보 같은 AIX 일 중 하나입니다.