请教关于结构体,关于内存的疑问!

darksworld 2012-11-11 09:36:16
以一个简单的例子说明:问题见注释行。 感谢!!!!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct ab
{
int *a1;
int cnt1;
};
ab AB;
ab plus(int *a,int cnt)
{

int *b = (int*)malloc(sizeof(int)*3);
for(int i=0;i<3;i++)
{
b[i] = a[i];
}
cnt++;
AB.a1 = b;
AB.cnt1 = cnt;
return AB;
}
void main()
{
int cnt=0;
int *a;
a = (int*)malloc(sizeof(int)*3);
memset(a,0,sizeof(int)*3);

a[0] = 1;
a[1] = 2;
a[2] = 3;

AB = plus(a,cnt);
AB.a1=a;
free(a); //问题:在这个地方,我只是想把主函数的a 释放掉,但是调试显示struct ab中的a1变量同时被释放了 而且之后我试图对a再次分配空间然后初始化,结果发现struct ab.a1 也被初始化了
//为什么啊???我明明没有对struct里的变量操作啊???

for(int i=0;i<3;i++)
{
printf("%d",AB.a1[i]);
}
printf("%d",AB.cnt1);
// printf("")
}
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
darksworld 2012-11-12
  • 打赏
  • 举报
回复
嗯,谢谢楼上们~问题解决啦~把变量只传值就好啦~
max_min_ 2012-11-11
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct ab
{
int *a1;
int cnt1;
};
ab AB;
   ab plus(int *a,int cnt)
  {

  int *b = (int*)malloc(sizeof(int)*3); 
  for(int i=0;i<3;i++)
  {
  b[i] = a[i];
  }
  cnt++;
  AB.a1 = b;
  AB.cnt1 = cnt;
  return AB;
  }
 void main()
 {
   int cnt=0;
           int *a;
           a = (int*)malloc(sizeof(int)*3);
            memset(a,0,sizeof(int)*3);

           a[0] = 1;
           a[1] = 2;
           a[2] = 3;

 AB = plus(a,cnt);
 AB.a1=a;
 free(a);   
 // AB.a1 =a ,也就是你把a的地址赋值给a1了,然后释放了a地址,所以AB.a1地址就没有啦。
//第二问嘛,类似第一问,对相同的地址进行操作呢
 for(int i=0;i<3;i++)
 {
 printf("%d",AB.a1[i]);
 }
 printf("%d",AB.cnt1);
//	 printf("")
 }
newtee 2012-11-11
  • 打赏
  • 举报
回复
manxiSafe 2012-11-11
  • 打赏
  • 举报
回复
AB.a1=a;     //这不是 初始化 ???  
 free(a);      //
darksworld 2012-11-11
  • 打赏
  • 举报
回复
来个人吧。。。。谢谢。。急啊、。、、

69,382

社区成员

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

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