我一直在遇到这个奇怪的错误,其中我的阵列的元素将与另一个交换位置。我可以通过在编译之前手动更改元素来解决问题,但为了便于访问,我想保持它的方式。我的目标是比较位并将结果存储在一个数组中。在我调用该函数后,我没有主动调用函数,因此它不会更改数组本身。当我将数组声明为常量时,它完成同样的事情。元素切换位置编译?
这里是我的数组:
int myconsts[8][8] = {
{ 6, 10, 0, 9, 14, 6, 6, 7 }
};
我作为14号(myconsts[4]
)和7(myconsts[7]
)问题将随机交换位置。以下是我在我的功能比较位
std::array<std::array<int, 4>, 8> myfunct(int arr[][8]) {
std::array<std::array<int, 4>, 8> arr2;
int i = 0;
do {
std::bitset<4> num1(arr[0][i]);
std::bitset<4> num2(arr[1][i]);
std::bitset<4> num3(arr[2][i]);
int no;
int no2;
int no3;
for (int x = 0; x < 4; x++) {
int sum = 0;
std::cout << num1[x] << " Num: " << num1[0] << num1[1] << num1[2] << num1[3] << std::endl;
}
std::cout << " " << std::endl;
i++;
} while (i < 8);
//just testing the logic
arr2 = { 0 };
return arr2;
}
输出:
[0]
0 Num: 0110
1 Num : 0110
1 Num : 0110
0 Num : 0110
[1]
0 Num : 0101
1 Num : 0101
0 Num : 0101
1 Num : 0101
[2]
0 Num : 0000
0 Num : 0000
0 Num : 0000
0 Num : 0000
[3]
1 Num : 1001
0 Num : 1001
0 Num : 1001
1 Num : 1001
这里是它交换与原始元素位置[7]! [4]
0 Num : 0111
1 Num : 0111
1 Num : 0111
1 Num : 0111
[5]
0 Num : 0110
1 Num : 0110
1 Num : 0110
0 Num : 0110
[6]
0 Num : 0110
1 Num : 0110
1 Num : 0110
0 Num : 0110
[7]
1 Num : 1110
1 Num : 1110
1 Num : 1110
0 Num : 1110
它的元素[0..7],两者之间的每个空间都代表着一个新元素我不确定在所有编译器上它是否一样。
解决此类问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –
@πάνταῥεῖ谢谢! – Countchocula
@πάνταῥεῖ我不确定搜索到什么才能得到直接的答案。 – Countchocula