当我在VS2010中的Release中编译相同的程序时,我得到了一个奇怪的行为。如果我多次从cmd.exe运行程序,结果会变得乱七八糟。但是,如果我在Debug中运行程序,结果总是一样的。
启动新的命令提示符会使程序再次发出正确的输出。
有什么可能导致这种情况的想法吗?
编辑:代码:
int main(int argc, char* argv[])
{
int* R;
int capacity;
if (argc < 2)
{
cerr << "Veuillez entrer le chemin du fichier d'entree" << endl;
return 1;
}
vector<BTS> stations;
LoadFromFile(argv[1], stations, capacity);
int count = 1;
if (argc == 3)
{
count = atoi(argv[2]);
}
clock_t startClock = clock();
R = new int[capacity+1];
for(int j = 0; j < count; j++)
{
memset(R, 0, capacity + 1);
for(unsigned int i=0; i < stations.size(); i++)
{
for(int j=capacity; j >= 0; j--)
{
if(j-stations[i].getNumberOfSubscribers() >= 0)
{
R[j] = max(stations[i].getRevenue() + R[j-stations[i].getNumberOfSubscribers()], R[j]);
}
}
}
}
// Print the results
cout << "Value : " << R[capacity] << endl;
cout << "Temps total : " << ((float)(clock() - startClock) / (float)CLOCKS_PER_SEC) << " s" << endl;
delete[] R;
return 0;
}
void LoadFromFile(std::string filePath, std::vector<BTS>& baseStations, int& capacity)
{
fstream source(filePath);
int numberOfStation;
source >> numberOfStation;
source >> capacity;
for (int i = 0; i < numberOfStation; i++)
{
int index, revenue, numberOfSuscribers;
source >> index;
source >> revenue;
source >> numberOfSuscribers;
BTS station = BTS(index, revenue, numberOfSuscribers);
baseStations.push_back(station);
}
source.close();
}
其余代码只是getter。现在我提供的文件作为输入:
10 25 1 7 6 2 4 4 3 7 6 4 2 1 5 7 8 6 9 10 7 4 5 8 10 10 9 1 1 10 10 10
答案 0 :(得分:2)
您的memset
不正确。你忘记了sizeof()
:
memset(R, 0, capacity + 1);
应该是:
memset(R, 0, (capacity + 1) * sizeof(int));
由于你没有将R
全部归零,因此它的上半部分是未定义的并且正在为你提供垃圾数据。