-1

我有int *b一个功能

void to_Binary(int num, int range, int **bi_res)
{
   int k = num, c = 0, r;
   *bi_res = (int *) calloc(range,sizeof(int));

   while (range >= c) {
        r = k%2; 
        c++; 
        (*bi_res)[range-c] = r; 
        k /= 2;
    }

   return;
}

这是我如何发送b到函数的示例

 void main
{
   // A small example if you want to replicate. 
   int *b;
   int i = 0;
   to_Binary(56,6,&b);
   while (i < 6) {printf("%d\n",b[i]); i++;}
   return;
} 

但它给了我循环中的段错误

注意:该函数本身可以正常工作,并且如果我以其他方式访问它,它会执行它必须做的事情,但是在需要我的情况下,我必须返回一个我不知道大小的整数数组

4

1 回答 1

2

while 循环至少有两个问题。第一个是您在此语句中使用了不正确的表达式

*bi_res[range-c] = r;

你必须写

( *bi_res )[range-c] = r;

第二个是,如果您甚至使用正确的表达式,但当 range 等于 c 时,您将尝试访问超出分配的数组,因为循环内的这个增量

c++;

因此表达式

range-c

会有一个负值。

你可以像这样写循环

while (range != c) {
    //...
}

而这个说法

k =/ 2;

包含语法错误。你的意思是

k /= 2;

请注意,return 语句是多余的。

并且函数 main 应该声明为

int main( void )

你应该在main中释放分配的内存。

于 2021-02-24T17:50:58.113 回答