2011-11-20 5 views
2

이것은 수정해야하는 C 함수입니다. 전 상자에서 시작하여 주소의 이전 4 바이트를 rt_tsk_self()에서 반환 된 U32 값과 비교하려고합니다. 그러나 "표현식이 완전한 객체 유형에 대한 포인터 여야합니다."라는 오류가 표시됩니다.오류 : 표현식은 완전한 객체 유형 (?)에 대한 포인터 여야합니다.

/*--------------------------- rt_free_box -----------------------------------*/ 

int rt_free_box (void *box_mem, void *box) { 
    /* Free a memory block, returns 0 if OK, 1 if box does not belong to box_mem */ 
if !(defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) 
    int irq_dis; 
endif 

    if (box < box_mem || box > ((P_BM) box_mem)->end) { 
    return (1); 
    } 

    //MODIFIED*********** 
    if (*(box-4) != rt_tsk_self()) { //<--- error: #852: expression must be a pointer to a complete object type 
    return (1); 
    } 
    //*************** 

/* 
other unrelated code 
*/ 
    return (0); 
} 

답변

2

void *을 역 참조하려고합니다. 그것은 작동하지 않습니다. 크기 4 개체의 사용

if (*(((uint32_t *)box)-1) != rt_tsk_self()) { 
+0

+1 좋은이 :) – Mordachai

+0

학자 연하는 노트를 달성하기 위해 : 대신보십시오이 엄격 결과 포인터가'uint32_t'에 참으로 포인트를 수행하는 경우에만 잘 정의 말하고있다. 당신은 학대로부터 보호받지 못합니다. 프로그램의 정확성은 인수의 * value *에 달려 있습니다. –

관련 문제