在C中为结构分配内存

时间:2013-06-09 16:41:11

标签: c data-structures dynamic-memory-allocation

我已经完成了一些关于为stackoverflow上的结构分配内存的研究,我找到的答案对我不起作用。话虽如此,这是我的问题和问题。在大多数情况下,他们中的大多数拥有我目前拥有的相同代码。虽然我的编译器给了我一个错误。

问题:我想为Struct(结构数组)而不是指针(指向结构的指针)分配内存。以下是我的结构的定义。

 #define INIT_MEMO_SIZE

typedef struct Memo
{
   struct HugeInteger *F; 
   int length; 

}Memo; 

必需的解决方案:在memo struct中我想动态分配一个INIT_MEMO_SIZE数组的巨大整数结构

尝试解决方案:右下角“malloc”我收到一条错误,指出“错误:类型为'void *'的实体不能用于初始化'HugeInteger *'类型的实体,这会强调关键字”malloc“in red。正在使用的编译器是Microsoft Visual Studio 2012

// Creates and initializes a Memo Struct
Memo *createMemo(void)
{ 
    HugeInteger *ptr = malloc(sizeof(HugeInteger) * INIT_MEMO_SIZE); 

    if(ptr == NULL)
        return NULL; 

} // End of *createMemo

问题:我做错了什么或分配结构数组的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

malloc返回void *。您需要转换返回的值。

 HugeInteger *ptr = (HugeInteger*)malloc(sizeof(HugeInteger) * INIT_MEMO_SIZE); 

答案 1 :(得分:0)

您的评论说这段代码“创建并初始化了一个Memo结构”但是,我看不到创建或初始化Memo struct的地方。实际上,该函数甚至不返回这样的结构(除非内存分配失败)。也许你想要这样的东西:

Memo *createMemo(void)
{ 
    Memo *memo = malloc(sizeof(Memo));

    if(memo == NULL)
        return NULL;

    memo->F = malloc(sizeof(struct HugeInteger) * INIT_MEMO_SIZE); 

    if(memo->F == NULL)
    { // Oops, memory allocation failed.
        free(memo);
        return NULL;
    }

    // other initialization here -- perhaps set memo->length 
    // to some sensible value
    memo->length = INIT_MEMO_SIZE;

    // and return the new memo
    return memo;
} // End of *createMemo

一般来说,您不需要在C中对malloc操作的结果进行类型转换。实际上,这样做通常会导致难以诊断的细微问题。所以,坦率地说,如果编译器抱怨,这表明你正在编译为C ++。

然而,你说不会将malloc的结果显示为红色下划线并且与之相关的某种“错误”。这告诉我你所看到的不是编译器错误,而是来自过度热心的编辑器的警告(通过Intellisense,可能与VS2012实施的SDL检查相结合)试图预先警告你关于你甚至在编译之前认为是什么问题。