C-结构-整数,不带强制转换

时间:2018-07-29 11:59:42

标签: c pointers struct typedef

因此,当我mallocstruct成员的数组时,要弄清楚是怎么回事? 发生以下error消息:

  

“赋值从指针进行整数转换而无需强制转换”。

如果有人可以帮助我了解我在malloc中出了错的地方,将不胜感激。

typedef struct _big_num {
   int  nbytes;  // size of array
   Byte *bytes;  /// array of Bytes
} BigNum;

void initBigNum(BigNum *n, int Nbytes)
{
    int i;
    n->nbytes = Nbytes;
    for (i = 0; i < Nbytes; i++) {
       n->bytes[i] = malloc(sizeof(Byte));   //This is where the error came up
       n->bytes[i] = 0;
       assert(n->bytes[i] == 0);
}
return;
}

2 个答案:

答案 0 :(得分:2)

n->bytes[i]的类型为Byte,它是“数组”中的单个元素。 malloc调用返回一个 pointer

您不分配数组本身,而是尝试分别分配每个元素,这不是它的工作原理。除编译器消息外,n->bytes可能未指向有效位置,从而使取消引用n->bytes[i] any 索引无效。

您可能想要

void initBifNum(BigNum *n, int NBytes)
{
    // Initialize members and allocate memory for array
    n->nbytes = NBytes;
    n->bytes = malloc(sizeof *n->bytes * NBytes);

    // Initialize all elements in the array to zero
    memset(n->bytes, 0, sizeof *n->nbytes * NBytes);
}

答案 1 :(得分:-1)

n->bytes[i]确实是*n->(bytes+i)。因此,您要分配malloc返回的内存地址以键入Byte而不是指针。

值得指出的是,在下一行中,即使您只是尝试为其分配地址,也要为n->bytes[i]分配0。如果您要分配的内存设置为0,只需使用calloc-它会为您分配内存并将其设置为0。