2011-03-27 2 views
1
int i; 

va_list objects_list; 
va_start(objects_list, objects); 
for (id o = objects, i = 0; o != nil; o = va_arg(objects_list, id), i++); 
objectsInArray = malloc(sizeof(id) * i); 
va_end(objects_list); 

// ... (malloc NULL checking is here, does not involve i) 

va_start(objects_list, objects); 
for (id o = objects, i = 0; o != nil; o = va_arg(objects_list, id), i++) { 
    objectsInArray[i] = o; 
} 
va_end(objects_list); 

objectsInArray[i] = o; 행에 Array subscript is not an integer 오류가 표시됩니다. objectsInArrayid *objectsInArray으로 선언되었습니다.배열 첨자가 정수가 아닙니다.

iint이므로이 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까? 미리 감사드립니다.

답변

4

i은 for 루프 내에 id입니다. 모호한 구.을 해결하려면 id ofor(...) 구. 외부에 선언하십시오.

Xcode에서 프로젝트 설정에서 "숨겨진 로컬 변수"에 대한 경고를 사용하도록 설정하여 컴파일러에서 경고합니다. 그렇지 않은 경우 gcc을 사용하는 경우 -Wshadow을 사용하십시오.

+0

Aha! 당신 말이 맞아요, 지금보십시오 :) –

+0

@Radek : 컴파일러가 이런 유형의 버그에 대해 경고하도록 제안을 추가했습니다. – mvds

+0

내가 Xcode를 사용하고 있다는 것을 어떻게 아는가? –

2

아니요, idi을 새로 만들었습니다. 불행히도, for-loop에서 "혼합 모드"초기화를 수행 할 방법이 없습니다.

1
for (id o = objects, i = 0; o != nil; o = va_arg(objects_list, id), i++) 

는 선언

id o = objects, i = 0; 
iint 아니다 수단

하지만 id를 포함한다. 루프 앞에 o을 선언하십시오.

관련 문제