c语言 - 在不知道结构子结构大小的情况下将内存分配给结构的指针是否有效?



考虑以下代码:

#include<stdio.h>
struct word {
char* data;
};
struct sentence {
struct word* data;
int word_count;
};
struct paragraph {
struct sentence* data  ;
int sentence_count;
};
struct document {
struct paragraph* data;
int paragraph_count;
};
void main()
{
int total_paragraph = 5;   //I'm myself assigning total number of paragraphs for simplicity

struct document doc;

doc.data = malloc(total_paragraph*(sizeof(struct paragraph)));  //Statement which I have a doubt!!!
....
....
....
}

首先,从逻辑上讲,这个语句(malloc语句,我对此有疑问(有效吗?

如果是,计算机如何在不知道struct paragraph的大小的情况下分配5个内存单元(每个单元都是结构段落大小((因为我们还没有对其内容进行mallocated,指针data指向结构语句类型(?

如果不定义其子结构,就不可能分配结构。毕竟,如果不知道一个结构的子结构的大小,你就不可能知道它的大小。

但是,struct paragraph不包含任何子结构。它包含一个结构指针,一个int,可能还有填充。所有这些的大小都是已知的。

你发布的代码非常好。

而不知道结构段落的大小(因为我们没有对其内容、指向结构语句类型的指针数据进行mallocated(?c指针结构

为什么我们需要malloc一个结构来知道它的大小?这个结构有多大?

struct document {
struct paragraph* data;
int paragraph_count;
};

它有一个指针和一个整数。指针具有固定的大小(在64位机器上通常为64位,在32位机器上为32位(,整数具有固定大小(通常为32位。因此,结构体的字节大小为sizeof(any_pointer)+sizeof(int)+padding。这三者都是编译器已知的。

最新更新