有谁知道可能会导致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