malloc一个struct指针数组,需要帮助

时间:2014-02-25 07:04:53

标签: c arrays pointers struct

我正在尝试使用malloc为一个struct指针数组分配堆内存,但我无法让它工作。下面是我的代码,但是当我用gcc编译时,我遇到了这样的错误“错误:' - >'的无效类型参数”

数组我想设置一个mystruct_pointer数组,它应该指向实际的__mystruct_t,我想我可以使用“ - >”在其成员字段上。我的代码出了什么问题?我认为它应该有效。感谢

typedef struct
{
    int id;
    bool status;
} __mystruct_t;

typedef __mystruct_t* mystruct_pointer;

mystruct_pointer struct_ptr_array;

void my_init(int number)
{
    struct_ptr_array = (mystruct_pointer) malloc(sizeof(__mystruct_t) * number);

    int i;
    for (i = 0; i < number; i++)  /* initialize the array of struct pointers */
    {
         struct_ptr_array[i]->id = i;
         struct_ptr_array[i]->status = false;
     }
}

4 个答案:

答案 0 :(得分:4)

替换' - &gt;'通过'。'。因为'struct_ptr_array [i]'已经取消引用指针。

答案 1 :(得分:2)

这些问题来自晦涩难懂的事情。你输入隐藏指针,你立即让你自己的程序不可读。而这是typedef唯一实现的目标。所以永远不要用typedef隐藏指针,这是非常糟糕的做法。

其他问题:

  • 避免使用双下划线,因为它是为编译器标识符保留的。

  • 不要转换malloc的结果,因为这样做在C中完全没有意义,在旧的C编译器上也有潜在的危险。

  • 处理malloc失败的情况,因为没有可用的堆空间。

  • 永远不要使用具有全局范围的变量,这是导致意大利面条代码的非常糟糕的做法。在C中没有理由这样做。

代码应修复如下:

typedef struct
{
    int id;
    bool status;
} mystruct_t;



static mystruct_t* struct_ptr_array;

void my_init(int number)
{
    struct_ptr_array = malloc(sizeof(mystruct_t) * number);

    if(struct_ptr_array == NULL)
    {
        handle_error();
        return ;
    }

    for (int i = 0; i < number; i++)  /* initialize the array of struct pointers */
    {
        struct_ptr_array[i].id = i;
        struct_ptr_array[i].status = false;
    }
}

答案 2 :(得分:1)

struct_ptr_array是一个指针,但是你将它编入索引,所以你得到一个实际的__mystruct_t,而不是指针。因此,只需使用:

     struct_ptr_array[i].id = i;
     struct_ptr_array[i].status = false;

答案 3 :(得分:1)

替换两行
struct_ptr_array[i].id = i;
struct_ptr_array[i].status = false;