[英]Struct Memory Allocation in C
使用malloc
分配struct
实例是否会影响其成员的分配? 意思是,正在做这样的事情:
typedef struct { int *i; } test;
int main() {
test *t = malloc(sizeof(test));
t->i = malloc(sizeof(int));
}
......没有意义,因为i
应该已经在堆上了,对吧?
或者,结构只是概念上的帮助程序员组两个完全独立的变量浮动在内存中? 意思是: test *t = malloc(sizeof(test))
只是分配内存来存储指向堆上成员的指针?
我对这个感到非常困惑......
test
的i
字段是原始int
, malloc
test
将处理它所需的内存。 将malloc
的结果分配给i
应该产生警告,因为您隐式地将指针转换为int
。
编辑:
正如评论中指出的那样,自上述答案发布以来,该问题已被编辑。 如果你的struct
包含一个指针, malloc
struct
将分配内存来保存一个指针,但是不会分配这个指针所指向的内存。 为此,您需要第二个malloc
调用(例如, test->i = malloc (sizeof (int))
)。
如果我是指向int的指针,你只会为i分配内存。 看这个例子:
#include <stdlib.h>
typedef struct
{
int i;
} test;
typedef struct
{
int* i;
} testp;
int main()
{
test* foo = malloc(sizeof(*foo));
foo->i = 3;
testp* bar = malloc(sizeof(*bar));
bar->i = malloc(sizeof(*bar->i));
*bar->i = 3;
}
分配结构时,已经为int i
分配了空间。
当你调用第一个malloc时,有足够的内存来保存整个结构,包括'* i',它有足够的位置来保存指向整数的指针。 然而,领域*我仍然没有初始化! 因此,在为第一个为整数保留内存的malloc分配它之前,不得使用* i。
给定结构类型“test”, malloc(sizeof(test))
为完整的结构分配空间,包括所有成员和之间的任何填充。 您可能会对一个或多个成员是指针的情况感到困惑:
typedef struct {
char *string;
char array[8];
} test;
在这种情况下, 指针本身是一个成员,并为其分配空间,但指向的东西不是成员,并且没有为其分配空间。
与struct具有数组成员的情况形成对比:整个数组是结构的成员,并且在结构中为其所有元素分配了足够的空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.