因此,当我malloc
是struct
成员的数组时,要弄清楚是怎么回事?
发生以下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;
}
答案 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。