我一直在遇到這個奇怪的錯誤,其中我的陣列的元素將與另一個交換位置。我可以通過在編譯之前手動更改元素來解決問題,但爲了便於訪問,我想保持它的方式。我的目標是比較位並將結果存儲在一個數組中。在我調用該函數後,我沒有主動調用函數,因此它不會更改數組本身。當我將數組聲明爲常量時,它完成同樣的事情。元素切換位置編譯?
這裏是我的數組:
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