分段故障;试图在C中将int转换为二进制

时间:2017-07-10 16:35:05

标签: c arrays binary syntax-error

我尝试使用此方法将整数转换为二进制:

int * intToBinary(int i) {
//return value
   int binary[] = {'\0'};
   int index = 0;

   for (int x = i; x != 0; x /= 2) {
       binary[index] = x%2;
       index++;
   }   

   return binary;
}

我的想法是我会反转数组(因为这将是正确的答案),我会得到转换。我已经尝试用Python做这个,它工作得非常好。

问题:当我运行上述方法时,出现Segmentation Fault: 11错误。我知道如果我使用一个超出数组索引的int,通常会发生这种情况,但这看起来不像问题。有没有人知道为什么我一直收到这个错误?

1 个答案:

答案 0 :(得分:2)

两个问题,两者都导致未定义的行为

第一个是返回指向本地数组 0 1 2 3 4 5 6 7 8 9 Q1 Q2 Q3 Q4 id 0 3.0 3.0 4.0 4.0 3.0 3.0 3.0 3.0 3.0 3.0 12.0 0.83 80.0 1.000 11.0 1 3.0 3.0 4.0 4.0 4.0 3.0 3.0 3.0 3.0 3.0 14.0 1.60 80.0 1.000 11.0 2 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 5.0 13.0 1.40 75.0 1.000 11.0 3 3.0 3.0 4.0 4.0 4.0 3.0 3.0 3.0 3.0 3.0 12.0 0.50 80.0 0.848 11.0 4 3.0 4.0 4.0 4.0 7.0 7.0 5.0 4.0 4.0 2.0 13.0 1.74 70.0 0.883 11.0 13 3.0 3.0 2.0 2.0 2.0 2.0 3.0 2.0 3.0 3.0 12.0 3.67 45.0 1.000 14.0 14 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 13.0 3.67 48.0 0.848 14.0 15 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 12.0 1.67 70.0 0.848 14.0 16 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 NaN 2.0 12.0 3.33 60.0 0.848 14.0 17 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 12.0 3.33 60.0 0.848 14.0 25 4.0 4.0 6.0 5.0 NaN 6.0 4.0 3.0 NaN 4.0 11.0 3.36 85.0 0.796 17.0 26 4.0 5.0 4.0 7.0 6.0 5.0 4.0 6.0 7.0 5.0 8.0 4.76 50.0 0.725 17.0 27 4.0 4.0 3.0 4.0 5.0 4.0 5.0 3.0 3.0 5.0 9.0 3.33 50.0 0.725 17.0 28 3.0 4.0 4.0 3.0 4.0 4.0 NaN 3.0 NaN 3.0 10.0 3.12 75.0 0.725 17.0 29 3.0 3.0 2.0 NaN 2.0 1.0 NaN NaN 1.0 2.0 15.0 3.05 79.0 0.725 17.0 39 3.0 3.0 5.0 4.0 4.0 4.0 4.0 4.0 NaN 5.0 12.0 1.19 80.0 0.883 18.0 40 5.0 4.0 5.0 5.0 5.0 5.0 4.0 5.0 7.0 4.0 9.0 1.83 75.0 0.883 18.0 41 5.0 6.0 4.0 4.0 4.0 4.0 4.0 4.0 7.0 7.0 12.0 1.71 35.0 1.000 18.0 42 5.0 5.0 5.0 5.0 4.0 NaN 4.0 4.0 3.0 2.0 13.0 0.86 85.0 1.000 18.0 43 3.0 3.0 3.0 3.0 3.0 3.0 3.0 5.0 3.0 3.0 11.0 1.36 75.0 1.000 18.0 48 1 的指针。一旦函数返回,该数组将不再存在,留下一个迷路指针。这可能不是导致崩溃的原因。

崩溃的最可能原因是数组binary只有 一个 元素。这意味着你的循环将写出它的界限。对于32位整数,它需要包含32个元素。

第二个问题很容易修复,只需设置正确的大小即可。第一个问题有点困难,但我的建议是你在调用函数中创建数组,并将其作为参数传递。