内存指针释放问题

子愚 2011-10-12 11:17:30
typedef struct
{
char date_str[11];
char time_str[9];
int sport;
}SUMMARY;
这样的结构体我在.c中是作为全局变量的,并且在某个函数1中用malloc分配了。
SUMMARY *ViewActivitiesS
譬如:
ViewActivitiesS = malloc(sizeof(SUMMARY)*6);
这个变量我再另一个函数2中也要用,
ViewActivitiesS = malloc(sizeof(SUMMARY)*7);
那么我怎么把ViewActivitiesS释放掉?

1、是在函数一里面free(ViewActivitiesS )?
free的话是不是在函数2里面就不能用了?
2、还是将ViewActivitiesS=0;
这样会不会导致ViewActivitiesS里面的date_str等成员没有释放掉?


如果说有这样一个结构体:
typedef struct
{
char date_str[11];
char time_str[9];
int* sport;
}SUMMARY;

ViewActivitiesS = malloc(sizeof(SUMMARY)*6);
并且sport指向了另一个变量,那么我怎么释放掉它
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
juckciy 2011-10-13
  • 打赏
  • 举报
回复
malloc 和 free 一般是成对出现的,malloc申请后,free掉该内存就不存在了,肯定不能再次free,跟在什么函数里面free完全没关系!.
自信男孩 2011-10-13
  • 打赏
  • 举报
回复
你自己定义的函数中申请的堆上的空间,如果调用函数还需要的用到这些空间的数据,那么你可以单独再自定义一个函数,该函数专门用于释放你申请的空间。
堕落的乞讨者 2011-10-13
  • 打赏
  • 举报
回复
malloc 和 free 一般是成对出现的,并且free的指针一定要是malloc时指向的内存。如果你需要在程序中移动ViewActivitiesS指针,那你可以多定义一个指针变量ViewActivitiesVariable,并让ViewActivitiesVariable=ViewActivitiesS。这样你只要移动ViewActivitiesVariable,而保证ViewActivitiesS在计算过程中不移动,最后你free(ViewActivitiesS),并且让ViewActivitiesS=NULL;即可。

还有如果你需要多次malloc,那你就用不同的变量名,比如你上面第二次malloc时可以再定义一个指针变量ViewActivitiesS1,然后具体方法和上面一样。

sport是在结构体中的,可以不用free。

不知道我这样说你能理解吗?
星羽 2011-10-13
  • 打赏
  • 举报
回复

void function1()
{
if (ViewActivitiesS)
free(ViewActivitiesS)
ViewActivitiesS = malloc
}

void function2()
{
if (ViewActivitiesS)
free(ViewActivitiesS)
ViewActivitiesS = malloc
}


PS: 这个东西为啥要搞成全局的呢,应该有更好的方法
在水四方 2011-10-12
  • 打赏
  • 举报
回复
ViewActivitiesS 你在函数1或函数2释放都行,但是一旦释放就不能在使用了,且要讲ViewActivitiesS = NULL,防止产生野指针。
free(ViewActivitiesS);
ViewActivitiesS = NULL;

ViewActivitiesS = malloc(sizeof(SUMMARY)*6);
此时,*sport就有了自己的空间, sport看用来存放另一个变量的地址。
快雪时晴 2011-10-12
  • 打赏
  • 举报
回复
情况一中可以使用函数长度变为7时时使用realloc
情况二正如楼上所说,如果sport是动态申请的,则若先释放ViewActivitiesS会导致sport指向的内存泄露掉了。
子愚 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wangg0717 的回复:]

malloc 和 free 一般是成对出现的

sport这个里面的数据如果是malloc申请的,
那么应该先free(sport)的
[/Quote]
这个答案针对的是typedef struct
{
char date_str[11];
char time_str[9];
int* sport;
}SUMMARY;

ViewActivitiesS = malloc(sizeof(SUMMARY)*6);
这几个问题怎么解决呢?
1、是在函数一里面free(ViewActivitiesS )?
free的话是不是在函数2里面就不能用了?
2、还是将ViewActivitiesS=0;
这样会不会导致ViewActivitiesS里面的date_str等成员没有释放掉?
wangg0717 2011-10-12
  • 打赏
  • 举报
回复
malloc 和 free 一般是成对出现的

sport这个里面的数据如果是malloc申请的,
那么应该先free(sport)的

69,372

社区成员

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

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