C free()不';不接受结构类型
你不能释放结构,你可以释放指针。释放内部C free()不';不接受结构类型,c,C,你不能释放结构,你可以释放指针。释放内部状态目标,或整个转换数组,或两者都释放。你不能释放结构,你可以释放指针。释放内部状态目标,或整个转换数组,或两者都释放。不能从数组中释放单个项(值) 如果它是指针或同时释放整个数组,则只能释放它所指向的值: size_t new_size = sizeof(transitions) + sizeof(TRANSITION); transitions = realloc(transitions, new_size); 或者将转换更改为指针数组,您可以执行前
状态目标
,或整个转换
数组,或两者都释放。你不能释放结构,你可以释放指针。释放内部状态目标
,或整个转换
数组,或两者都释放。不能从数组中释放单个项(值)
如果它是指针或同时释放整个数组,则只能释放它所指向的值:
size_t new_size = sizeof(transitions) + sizeof(TRANSITION);
transitions = realloc(transitions, new_size);
或者将转换更改为指针数组,您可以执行前者:
free(transitions);
无法从数组中释放单个项(值)
如果它是指针或同时释放整个数组,则只能释放它所指向的值:
size_t new_size = sizeof(transitions) + sizeof(TRANSITION);
transitions = realloc(transitions, new_size);
或者将转换更改为指针数组,您可以执行前者:
free(transitions);
transitions[i]
不是要传递给free
的任何指针类型transitions
是指向结构的指针,但transition[i]
成为结构变量(不是指针类型),因此不应传递给free
这样做-
free(transitions[i]);
transitions[i]
不是要传递给free
的任何指针类型transitions
是指向结构的指针,但transition[i]
成为结构变量(不是指针类型),因此不应传递给free
这样做-
free(transitions[i]);
规则是释放你所拥有的malloc-ed。这里你重新定位strutstransition
数组,而不是单个的transition
因此,释放时,必须使用:
free(transitions);
顺便说一句,你传递给free的必须是一个指针,它将被无声地转换为一个void*
transition
是一个可以衰减为指针的数组,但transition[i]
是一个结构,不能转换为数组。这就是编译错误的含义。如果您使用了free(&(transition[i])
或free(transition+1)
则不会有编译错误,但它会调用未定义的行为,因为您将尝试释放指向未通过malloc
获得的内存的指针。规则是释放您已使用的malloc-ed。这里您将重新定位strutstransition
数组,而不是单个transition
因此,释放时,必须使用:
free(transitions);
顺便说一句,你传递给free的必须是一个指针,它将被无声地转换为一个void*
transition
是一个可以衰减为指针的数组,但transition[i]
是一个结构,不能转换为数组。这就是编译错误的含义。如果您使用了free(&(transition[i])
或free(transition+1)
则不会有编译错误,但它会调用未定义的行为,因为您试图释放指向未通过malloc
获得的内存的指针,但无法看到malloc
-我很困惑,您只能free
查看malloc
返回的内容。您是否有转换[i]=malloc(…)
?不不要释放它,然后就看不到malloc
-我是Foxed,你只能free
查看malloc
返回的内容。您是否有转换[i]=malloc(…)
?不不要释放它then@DennisvonEich您将内存分配给转换(释放仅在此需要),而不是转换[i]
(因此无需释放它)。您应该free
仅使用malloc
或系列分配的内容。对于每个malloc,您必须有一个相关的free。计算您执行的malloc的数量。我得到运行时异常“中止”@DennisvonEich您删除了循环吗?循环在这种情况下仍然无效。我确实删除了循环。@DennisvonEich您将内存分配给转换(free
,仅此处需要),而不是转换[I]
(因此无需释放它)。您应该free
仅使用malloc
或系列分配的内容。对于每个malloc,您必须有一个相关的free。计算您执行的malloc的数量。我得到运行时异常“中止”@DennisvonEich您删除了循环吗?在这种情况下,循环仍然无效。我确实删除了循环。我的状态结构有一个转换列表。正如你所看到的,这是一个指针。如果我只是释放指针,是否释放列表中的每个转换?您应该传递free
从malloc
或realloc
返回的确切指针。我的状态结构有一个转换列表。正如你所看到的,这是一个指针。如果我只是释放指针,是否释放列表中的每个转换?您应该传递free
从malloc
或realloc
返回的确切指针。