结构体指针的释放问题!

sl252518553 2014-04-15 10:11:39
typedef struct A
{
int d;
int alpha;
int height;
int width;
int *buf;
}A;

typedef struct B
{
int dnum;
int alphanum;
int Tempnum;
A SFT[12]; //dnum*alphanum=Tempnum
}B;

代码如上,定义了两个模板,其中B模板中有A类型的数组变量,可是最后释放的时候要如何释放每个buf 呢?
void main()
{
B *temp;
initfunction(&temp);
freefunction(&temp);
}
void freefunction(B **temp)
{
for(int k=0;k<12;k++)
{
free((*temp)->SFT[k].buf);//////////////////////内存错误
(*temp)->SFT[k].buf=NULL;
}
}

这样运行的话,到free函数时会报内存错误,是不是结构体B里面不能定义数组变量?具体应该如何释放buf??跪求指导!
...全文
248 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CarlXie 2014-04-18
  • 打赏
  • 举报
回复
没有malloc/alloc的时候调用free出错是可以预见的错误
一根烂笔头 2014-04-18
  • 打赏
  • 举报
回复
函数内部声明的变量都是在栈上的,不是在堆上,因此不用free,free是用来释放她丈夫malloc干出来的“孩子(动态分配的内存)”的!malloc,free是一夫一妻制!
「已注销」 2014-04-16
  • 打赏
  • 举报
回复
不要单独使用malloc和free
如此美丽的你 2014-04-16
  • 打赏
  • 举报
回复
首先, 在结构体struct B生成具体数据的时候, 需要初始化buf为NULL. 再有, 必需是要malloc申请, 才能使用free. 没看到你的initfunction是怎么写的, 如果有代码, 应该就能看到是什么问题了.
我还在迷路 2014-04-16
  • 打赏
  • 举报
回复
引用 2 楼 xiaohuh421 的回复:
首先, 在结构体struct B生成具体数据的时候, 需要初始化buf为NULL. 再有, 必需是要malloc申请, 才能使用free. 没看到你的initfunction是怎么写的, 如果有代码, 应该就能看到是什么问题了.
二楼正解!楼主的问题已经可以解决
xiaohuh421 2014-04-16
  • 打赏
  • 举报
回复
首先, 在结构体struct B生成具体数据的时候, 需要初始化buf为NULL. 再有, 必需是要malloc申请, 才能使用free. 没看到你的initfunction是怎么写的, 如果有代码, 应该就能看到是什么问题了.
新手上路1234 2014-04-15
  • 打赏
  • 举报
回复
使用free的同时要用用malloc库函数创建的内存,不然会报错的

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧