我正在尝试理解一个c代码,(SimpleScalar,bpred.c),有一件事让我很困惑:
int *shiftregs;
shiftregs = calloc(1, sizeof(int));
int l1index, l2index;
l1index = 0;
l2index = shiftregs[l1index];
我删除了一些可能无用的代码。 calloc
调用后,*shiftregs
成为指针数组? l2index
的价值是多少?非常感谢!
答案 0 :(得分:1)
由于shiftregs
是指向int
的指针,*shiftregs
是int
。
由于calloc
保证其分配的内存设置为0
,并且您已分配足够的内存来引用shiftregs[0]
,l2index
将为{{1} (假设0
没有失败并返回calloc
)。
答案 1 :(得分:1)
calloc()
函数用于分配可以通过指针shiftregs
引用的归零整数的动态数组。
除非分配失败(l2index
返回NULL),否则calloc()
中的值将为零。如果分配失败,则调用未定义的行为;任何事情都可能发生,但你的程序可能会崩溃。检查分配,以免崩溃!
答案 2 :(得分:0)
l2index
为0. calloc
将内存设置为零。以下是Linux程序员手册:
calloc()为大小为nmemb的元素数组分配内存 每个字节,并返回指向已分配内存的指针。记忆 设置为零。如果nmemb或size为0,则calloc()返回 NULL或者以后可以成功的唯一指针值 传递给free()。
答案 3 :(得分:0)
检查calloc()是否返回NULL。 如果是这样,“l2index = shiftregs [l1index];”将崩溃,因为你试图从NULL点(shiftregs)获取值。 如果没有,因为他们说l2index将是0.