Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C free()不';不接受结构类型_C - Fatal编程技术网

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。这里你重新定位struts
transition
数组,而不是单个的
transition

因此,释放时,必须使用:

free(transitions);

顺便说一句,你传递给free的必须是一个指针,它将被无声地转换为一个
void*
transition
是一个可以衰减为指针的数组,但
transition[i]
是一个结构,不能转换为数组。这就是编译错误的含义。如果您使用了
free(&(transition[i])
free(transition+1)
则不会有编译错误,但它会调用未定义的行为,因为您将尝试释放指向未通过
malloc

获得的内存的指针。规则是释放您已使用的malloc-ed。这里您将重新定位struts
transition
数组,而不是单个
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
返回的确切指针。