我試圖讓以下測試程序工作2天,但它不工作。它基於幾個工作完好的頭文件,因爲我通過另一個測試程序檢查了它們。它具有名爲Area,Circle,Ring,Rectangle和Square的頭文件。我還定義了函數randcolor和randsize;我檢查everyhting一遍又一遍,但它是生產相同ouptut aftera while循環第二次嘗試:C++同時使用開關內部同時輸出while循環
int main()
{
srand(time(NULL));
Area *list[20];
int m;
Area *c;
int j = 0;
while (j < 20) {
m = rand() % 4;
cout << m << endl;
switch (m) {
case 0: {
Circle a(randcolor(), randsize());
c = &a;
break;
}
case 1: {
Ring r(randcolor(), randsize(), randsize());
c = &r;
break;
}
case 2: {
Rectangle re(randcolor(), randsize(), randsize());
c = &re;
break;
}
case 3: {
Square sq(randcolor(), randsize());
c = &sq;
break;
}
}
list[j] = c;
j++;
}
return 0;
}
請幫我 預期的輸出應該是這樣的:區構造函數被調用.. 區構造函數被調用區構造函數被調用
所以它應該是這樣的: 20次randomnumber 3介於0和 「區域構造函數被調用......」
但它給了第二次嘗試...在後相同數量的同時,與您的代碼迴路
請提供期望的輸出,電流輸出。 – merlin2011
你知道塊範圍是什麼,它對你正在處理的底層對象有什麼影響?例如,「情況0」。一旦中斷命中,範圍被留下並且'a'被銷燬,留下'c'作爲不確定的指針。把它添加到你的陣列就是爲了這個UB蛋糕。 – WhozCraig
這解釋了很多... –