gpt4 book ai didi

c - 如何使用自定义类型进行 malloc()?

转载 作者:行者123 更新时间:2023-11-30 18:36:12 25 4
gpt4 key购买 nike

在头文件 -- gameboard.h -- 中,我有一个名为 gameboard 的结构。在此结构中,我声明 square **squares,其中 squares 如下:typedef enum {EMPTY, RED_COIN, YELLOW_COIN} square;

在 gameboard.c 中,我有一个为 2D 数组分配内存的函数。在此函数中,我声明 gameboard* result

问题:当创建初始数组(即存储数组的 2D 部分)时,为什么我不能这样做:

result->squares = malloc(numRows * sizeof(result->square*));

更具体地说,为什么 square 是无效类型?

最佳答案

您不能“执行此操作”,因为您的 result->square 子表达式无效。 result->squares 是有效的。普通的 square 也是有效的。但是 result->square 根本没有任何意义。在 C 中 -> 是成员访问运算符。并且您的结构类型没有名为 square 的成员。

  • malloc 对象数组的典型/惯用 C 代码如下所示

    some_pointer = malloc(n_elements * sizeof *some_pointer);

    将其应用到您的案例中,我们得到

    result->squares = malloc(numRows * sizeof *result->squares);
  • 如果您的 result->squares 的类型为 square **,那么正确的大小也可以用 sizeof(array_element_type) 来表示

    result->squares = malloc(numRows * sizeof(squares *));

    但是前一个(与类型无关)变体可以说比后一个版本更好,特别是在与类型无关方面。另请参阅:Why is it safer to use sizeof(*pointer) in malloc

我完全不清楚你是如何得到sizeof(result->square*)的。您的变体看起来像是两者的奇怪混合体,以不正确且毫无意义的方式编写。

关于c - 如何使用自定义类型进行 malloc()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42522066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com