2013-09-28 6 views
1
내가 경고를 던지는 다음의 코드 조각에 문제가있어 당신이 나를 도울 수있는 기대했다

:경고 : 배열 첨자가 배열 범위를 초과 [-Warray - 경계]

fprintf (fp, "%dd%d+%d ", pMobIndex->mana[DICE_NUMBER], 

DICE_NUMBER에 정의되어 내 헤더 파일을 0으로 설정하십시오.

확실히 0은 배열의 크기를 초과하지 않습니다.

배열은로 정의됩니다. 0 배열의 범위 내에서 명확로

int    mana[2]; 

나는 그것이이 일을 왜 전혀 생각이 없다. 내 엔진 코드 절반이 배열에 묶여있는 오류를 던지고 있습니다. 약 30 개가 있습니다. NONE이 나에게 의미가 있습니다.

gcc -O3 -s -Wall -c -o obj/olc_save.o olc_save.c 
olc_save.c: In function 'save_mobile': 
olc_save.c:234:13: warning: array subscript is above array bounds [-Warray-bounds] 
    fprintf (fp, "%dd%d+%d ", pMobIndex->mana[DICE_NUMBER], 
     ^

그것은 또한 발생합니다 : 여기

는 메이크업의 출력입니다

db1.c: In function 'create_mobile': 
db1.c:2056:30: warning: array subscript is above array bounds [-Warray-bounds] 
      + pMobIndex->mana[DICE_BONUS]; 

olc_act.c: In function 'medit_manadice': 
olc_act.c:6500:15: warning: array subscript is above array bounds [-Warray-bounds] 
    pMob->mana[DICE_BONUS] = atoi (bonus); 

내 헤더 파일의 정의 :

/* dice */ 
#define DICE_NUMBER 0 
#define DICE_TYPE 1 
#define DICE_BONUS 2 
,

나는 DICE_BONUS가 (지금은 그것을 깨닫고있을 것이다) 알고 있지만, 내 인생에서 DICE_NUMBER가 왜 있는지 알 수 없다.

D 오. 문제는 fprintf에있는 세 번째 정수 출력이 DICE_BONUS이지만 다른 행에 있기 때문에 컴파일러가 DICE_NUMBER에 대한 경고 메시지를 보냈다고 생각합니다. 보너스에 대한 경고였습니다.

+6

[SSCCE] (http://sscce.org)하시기 바랍니다. – jrok

+0

표시되는 코드로 인해 경고가 발생 했습니까? –

+0

코멘트가 아닌 자신의 질문 plz로 업데이트하십시오. – billz

답변

3

은 두 요소에 대한 정수 배열이며 DICE_BONUS은 2로 정의되어 있으므로 mana[2]은 세 번째 요소에 액세스하려고한다는 것을 의미합니다.

REMEMBER 배열은 0 아래 첨자로 시작합니다. 따라서 DICE_BONUS과 관련된 모든 경고가 유효합니다. 세 요소에 대해 배열을 다시 정의해야합니다.

DICE_NUMBER 경고가 발생하지 않습니다. 아마도 그 행에 DICE_BONUS을 포함하는 추가 인수가있을 것입니다.

+0

사실, 형식 문자열에'4d6 + 1'과 같은 내용을 표시하는 3 개의 정수가 있으면'printf' 함수 호출의 나머지 부분에'pMobIndex- > 마나 [DICE_BONUS]'가 계속 진행됩니다. – SirGuy