请教关于结构体,关于内存的疑问!
以一个简单的例子说明:问题见注释行。 感谢!!!!
#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("")
}
#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("")
}
...全文
相关推荐
动态分配结构体内存(malloc)
该资源是关于C语言编程中动态分配结构体内存的示例,用于创建一个汽车销售系统的搜索界面数据库。程序通过`malloc`函数为`struct carinfo`结构体分配内存,存储汽车的相关信息,包括排量
结构体内存对其计算结构体大小
内存对齐确保了数据在内存中的存储方式能够有效地被处理器访问,提高性能并避免潜在的错误。本文将深入探讨结构体内的内存对齐规则及其计算结构体大小的方法。
C语言结构体占用内存深入讲解
"C语言结构体占用内存的计算与内存对齐原理"在C语言中,结构体用于组合不同类型的数据,其占用的内存大小并不总是成员大小的简单相加。这主要是由于内存对齐的规则,它是一种为了提高数据访问效率而采取的策
结构体所占内存空间的计算
结构体所占内存空间的计算计算结构体在内存中的分布是指计算结构体类型所占内存大小的过程。该过程是了解结构体在内存中的存储规则的基础。这其中最重要的概念是结构体在内存中的对齐规则。
sizeof求struct结构体内存大小的问题
在C语言中,`sizeof`运算符用于计算数据类型或者变量在内存中占用的字节数。当应用于`struct`结构体时,它会返回整个结构体占据的总字节数,这涉及到内存对齐的问题。



