指针calloc函数是否返回指针向量? (C语言)

时间:2013-11-21 01:11:56

标签: c pointers calloc

我正在尝试理解一个c代码,(SimpleScalar,bpred.c),有一件事让我很困惑:

    int *shiftregs;
    shiftregs = calloc(1, sizeof(int));

    int l1index, l2index;
    l1index = 0; 
    l2index = shiftregs[l1index];

我删除了一些可能无用的代码。 calloc调用后,*shiftregs成为指针数组? l2index的价值是多少?非常感谢!

4 个答案:

答案 0 :(得分:1)

由于shiftregs是指向int的指针,*shiftregsint

由于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.