有誰知道可能會導致array [n]和array [x](x = n)的讀回值彼此不同嗎?爲什麼array [n]和array [x]其中x = n返回不同的值?
編輯:以下是一個可編譯的代碼來說明我遇到的問題。如果您運行以下代碼,則不會看到任何問題。我只是用它來描述我在我的原始程序中看到的問題,該程序是一個擁有100多個課程的模擬器。
#include <iostream>
using namespace std;
class MySimulatorImplementationBy100Classes;
class MySimulator {
public:
enum SigList {
SIG0,
SIG1,
SIG2,
// ...
SIG18=18,
SIG19=19,
SIG70=70,
SIG80=80
};
void run() {}
private:
MySimulatorImplementationBy100Classes *impl_;
};
int main() {
MySimulator sim;
// set up the simulation
sim.run();
enum SigAnalysis {
ANALYSIS0,
ANALYSIS1,
ANALYSIS2,
ANALYSIS3,
ANALYSIS4,
ANALYSIS5,
ANALYSIS6,
NUM_ANALYSIS
};
const MySimulator::SigList signal_source[NUM_ANALYSIS] = {
MySimulator::SIG18,
MySimulator::SIG18,
MySimulator::SIG18,
MySimulator::SIG18,
MySimulator::SIG70,
MySimulator::SIG80,
MySimulator::SIG19
};
for(int i=0; i<NUM_ANALYSIS; ++i) {
cout <<signal_source[i]<<"\t" << MySimulator::SIG80 <<"\t" << signal_source[5] << "\t" << i << "\t";
cout << &signal_source[i]<<"\t" << &signal_source[5]<< "\n";
}
}
在我的計劃中,輸出
18 80 80 0 0xfffe1c90 0xfffe1ca4
18 80 80 1 0xfffe1c94 0xfffe1ca4
18 80 80 2 0xfffe1c98 0xfffe1ca4
18 80 80 3 0xfffe1c9c 0xfffe1ca4
70 80 80 4 0xfffe1ca0 0xfffe1ca4
173068832 80 80 5 0xfffe1ca4 0xfffe1ca4
168047112 80 80 6 0xfffe1ca8 0xfffe1ca4
雖然我希望它是
18 80 80 0 0xfffe1c90 0xfffe1ca4
18 80 80 1 0xfffe1c94 0xfffe1ca4
18 80 80 2 0xfffe1c98 0xfffe1ca4
18 80 80 3 0xfffe1c9c 0xfffe1ca4
70 80 80 4 0xfffe1ca0 0xfffe1ca4
80 80 80 5 0xfffe1ca4 0xfffe1ca4
19 80 80 6 0xfffe1ca8 0xfffe1ca4
我不知道爲什麼signal_source[i]
當i = 5點返回的東西從signal_source[5]
不同,而&signal_source[i]
和&signal_source[5]
是相同的。
而且,如果我的for
循環cout
sim.run();
// dummy print
cout << "dummy\n";
enum SigAnalysis { //...
在什麼地方增加一些假的碼結果將改變:
dummy
172402312 80 80 0 0xfffe1c90 0xfffe1ca4
172446752 80 80 1 0xfffe1c94 0xfffe1ca4
18 80 80 2 0xfffe1c98 0xfffe1ca4
18 80 80 3 0xfffe1c9c 0xfffe1ca4
70 80 80 4 0xfffe1ca0 0xfffe1ca4
80 80 80 5 0xfffe1ca4 0xfffe1ca4
19 80 80 6 0xfffe1ca8 0xfffe1ca4
有沒有人有什麼線索可以去錯在這裏?
我使用的是gcc版本3.4.6。謝謝您的幫助!
你能整理一個可編輯的例子嗎?這是剝離的代碼? (並且在附註中,您可能想要使用更新版本的gcc) – GManNickG 2010-08-10 20:23:06
上面的代碼在VS2010中對我進行了罰款,除非我必須填寫由......指示的缺少的枚舉。因此,請按照GMan建議弄清楚你的代碼正在發生什麼。 – naivnomore 2010-08-10 20:29:07
您可能還想打印出您的結果,以確認您的索引沒有做任何奇怪的事情。不知道這是否會有所幫助,但值得一試。 – Shaded 2010-08-10 20:52:39