C 动态分配一个对象,将不属于';结构中的PTR(未动态分配)是否在堆栈而不是堆中?

C 动态分配一个对象,将不属于';结构中的PTR(未动态分配)是否在堆栈而不是堆中?,c,struct,heap,C,Struct,Heap,假设我有这个结构: typedef struct List_object list; struct List_object { char* name; struct stat stats; }; 大体上: list** listObjects = malloc(sizeof(list*) * n); for(int i = 0; i < n; i++) { listObjects[i] = malloc(sizeof(list));

假设我有这个结构:

typedef struct List_object list;
struct List_object {
    char* name;
    struct stat stats;
};
大体上:

list** listObjects = malloc(sizeof(list*) * n);
    for(int i = 0; i < n; i++) {
        listObjects[i] = malloc(sizeof(list));
        listObjects[i]->name = malloc(sizeof(char) * 124);
    }
我想知道数组listObjects的每个对象中的数据成员struct stats是否也会在堆中

或者它只会是列表对象及其数据成员名称,因为这两个对象都分配了malloc,而不是stats

我想知道数组listObjects的每个对象中的数据成员struct stat stats是否也会在堆中


对。将在堆上分配每个结构成员。尽管请注意,虽然示例中的指针
name
本身将与堆上的结构一起分配,但它指向的可能是任何东西。

所有动态分配的内存都将在堆中。@JonathanLeffler,因为我没有动态分配“struct stats”并设置其中一个“listObjects”元素,listObjects[i]->stats=stats在函数中:setListObjects(char*name,struct stat stats),listObjects[i]->stats是否仅在堆栈中?使用
list**listObjects=malloc(sizeof(list)*n)
创建指向
列表
的指针,并将其分配给指向
列表
的指针。尺寸不匹配。你的意思是
list**listObjects=malloc(sizeof(list*)*n)?C语言中没有“堆栈”和“堆”这样的东西。这些词语不出现在标准文本中。您的实现可以使用堆栈和/或堆来实现该语言,但这些都是实现细节。
void setListObjects(char* name, struct stat stats);