gpt4 book ai didi

c - 释放 malloc 的结构数组时出错

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:16 25 4
gpt4 key购买 nike

我在释放用于将另一个数组的大小加倍的临时结构数组时遇到问题。释放原始数组似乎没有任何问题。

void foo(StruName **structName,i nt *size)
{
...
StruName *temp_array = (StruName*) malloc(*size * 2 * sizeof(StruName));
for (i = 0; i < *size; i++)
temp_array[i] = (*original_array)[i];
free(*original_array);
*original_array = temp_array;
free(*temp_array);

我使用 g++ -Wall 得到以下错误

error: cannot convert ‘StruName’ to ‘void*’ for argument ‘1’ to ‘void free(void*)’

知道是什么原因造成的吗?如果我离开 free(*temp_array);完全退出,程序编译并运行良好。免费(temp_array);导致段错误

最佳答案

函数定义的以下部分不正确:

void foo(Struct **structName, int count, int *size)

您是否已将您的结构声明为 structName?如果是,您还需要在定义中提及参数,而不仅仅是它的类型。即使 structName 是您的结构,那么您也应该编写 struct structName** 而不是 Struct **structName。(Struct 与 C 中的 struct 不同)

这里还有一个错误:

malloc(*size * 2 * sizeof(original_array)

您应该将 *size 括在大括号内,因为不清楚您是在取消引用 size 还是在取消引用 size*2*sizeof(original_array)

关于c - 释放 malloc 的结构数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com