문제

클래스 객체의 포인터-포인터를 만들고 포인터를 사용하여 새 객체를 만들려고 할 때 seg-faults. 왜 이런 일이 발생합니까?

struct Level
{   
        int SoldierCount;
        Soldier **soldier;
        int taskCount;
        int *taskPercentage;
        int *taskBitmapX;
        int *taskBitmapY;
}level;

void createMap()
{
    //Input and Declartion of various variabls goes here

    level.soldier = new Soldier* [level.SoldierCount];

    //Seg Faults Here
        level.Soldier[i] = new Soldier(initX, initY, initDirection, steps);     

}

군인 계급 생성자 :

Soldier(int, int, int, int);
도움이 되었습니까?

해결책

비어 Soldier 생성자 귀하의 코드는 정상적으로 작동합니다 (소문자처럼 수정 된 오타 제외 level.soldier[])

생성자 본문을 게시하십시오.

다른 팁

코드에서 segfault 관련 문제를 찾을 수 없습니다.

그러나 나는 당신의 사례 민감도가 왜 일치하지 않는지에 대해 혼란스러워합니다.
수업은 "군인"그리고 군인 **는"불린다 "군인".

하지만 당신은 다음과 같이 씁니다.

level.soldier = new soldier* [level.SoldierCount];

그리고:

level.Soldier[i] = new Soldier(initX, initY, initDirection, steps);

코드가 실제로 작성된대로 컴파일하면 문제가 될 수 있습니다.

혹시 i >= level.SoldierCount?

의 가치는 무엇입니까 level.SoldierCount? 의 가치는 무엇입니까 i

Segfault가 발생할 수있는 유일한 방법은 할당되지 않은 메모리에 액세스하는 것입니다. 당신이 강조한 줄에서, 일어날 수있는 유일한 장소는 배열 (또는 생성자 내부, 코드를 게시하지 않은)입니다. 아마도 아마도 배열에서 바운드에서 액세스하고있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top