Error: expression must be a pointer to a complete object type (?)
13,276
You're trying to dereference a void *
. That won't work. Try this instead:
if (*(((uint32_t *)box)-1) != rt_tsk_self()) {
Author by
Admin
Updated on June 04, 2022Comments
-
Admin almost 2 years
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); }
-
Kerrek SB over 12 yearsPedantic note: this is strictly speaking only well defined if the resulting pointer does indeed point to a
uint32_t
. You're not protected from abuse; the correctness of your program depends on the value of the argument.