问题
This is the function in C that I need to modify. I am trying to have PREVIOUS 4 bytes of address starting from "box" to compare with a returned U32 value from rt_tsk_self()
, but it just gives me the error that "expression must be a pointer to a complete object type".
/*--------------------------- 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);
}
回答1:
You're trying to dereference a void *
. That won't work. Try this instead:
if (*(((uint32_t *)box)-1) != rt_tsk_self()) {
来源:https://stackoverflow.com/questions/8199369/error-expression-must-be-a-pointer-to-a-complete-object-type