【发布时间】:2021-11-17 00:59:49
【问题描述】:
我在这个网站上搜索了关于结构的malloc 的主题。但是,我有一个小问题。结构元素上的malloc 是否与整个结构上的malloc 不同,尤其是当该结构非常简单时,即只有一个我们都想要分配的成员?为了清楚起见,请参见下面与 student 和 student2 结构对应的代码。
struct student {
int* majorScore;
};
struct student2 {
int majorScore[3];
};
int main()
{
struct student john;
john.majorScore = (int*) malloc(sizeof(int) * 3);
john.majorScore[0] = 50;
john.majorScore[1] = 27;
john.majorScore[2] = 56;
struct student2* amy= (struct student2*)malloc(sizeof(struct student2));
amy->majorScore[0] = 50;
amy->majorScore[1] = 27;
amy->majorScore[2] = 56;
return 0;
}
它们的内存级别不同吗?如果是,有什么区别?如果不是,就良好的编程风格而言,哪个可能更好?
【问题讨论】:
-
malloc在结构上只会分配结构本身的大小,而不是结构内指针指向的动态数据的大小。 -
你不是在比较喜欢和喜欢。对于
john,您在本地struct中分配数组。对于amy,您在具有固定数组的堆上分配一个struct。哪个更好?如果你不知道编译时有多少分数,它们就不可能有一个固定的数组。 -
它们的内存级别不同吗?好吧,您提供了两种不同的结构定义,因此在这方面它们是不同的。它们的相同之处在于动态分配的数据将存在于内存的
.heap部分中的某处。就良好的编程风格而言,哪个更好?有争议并取决于您的用例。我认为大小为 3 的majorScore数组对于实际场景来说是不现实的,但如果它符合您的需求,那么使用这种方法就可以了。 -
student2包含一个由int组成的三元素数组。student包含一个int指针。这是两个非常不同的东西。 -
不要投
malloc()!
标签: c struct memory-management malloc